[SCM] Samba Shared Repository - branch v4-11-test updated

Karolin Seeger kseeger at samba.org
Wed Aug 21 09:58:02 UTC 2019


The branch, v4-11-test has been updated
       via  c14427253e8 tdb: Release tdb 1.4.2
       via  afd6b77bb84 tdb: Inline the common part of tdb_oob
       via  3325a4d4146 tdb: Speed up tdb_oob()
       via  6312223d6e6 tdb: Introduce tdb_oob()
       via  fab20658b9a tdb: Rename tdb_oob() to tdb_notrans_oob()
      from  38876ad4ef4 smbtorture: extend rpc.lsa to lookup machine over forest-wide LookupNames

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-11-test


- Log -----------------------------------------------------------------
commit c14427253e8cb4aab951ded527258e6f67fc4452
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 20 14:55:27 2019 +0200

    tdb: Release tdb 1.4.2
    
    * Build fixes
    * Improve the performance by inlining the tdb_oob() checks
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Tue Aug 20 14:45:41 UTC 2019 on sn-devel-184
    
    (cherry picked from commit 60cba7b3a17104da1543d59609f50c6638880dd1)
    
    Autobuild-User(v4-11-test): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(v4-11-test): Wed Aug 21 09:57:08 UTC 2019 on sn-devel-184

commit afd6b77bb849bdcfa30513626c61a7aade7d88e2
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 4 18:26:05 2019 +0200

    tdb: Inline the common part of tdb_oob
    
    When you set
    
    in tdbtorture.c to make it more similar to locking.tdb use,
    
    bin/tdbtorture -m -n 1 -l 100000 -s
    
    becomes twice as fast. This is a pretty extreme case, but all other
    tests that I did improve significantly as well.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit f5735e2c666a5a494131c1d25f7ba5c7fbeae923)

commit 3325a4d4146d5793b1ae6a7b7a502c52a489ac59
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 4 12:18:19 2019 +0200

    tdb: Speed up tdb_oob()
    
    This is common between both implementations of tdb_oob(). It's
    faster if we don't have to dereference function pointers.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit 897bffa8166f643eb9063a848bb0c02455663317)

commit 6312223d6e609d629dfc7914d62bf80ced584c6b
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 4 12:15:14 2019 +0200

    tdb: Introduce tdb_oob()
    
    Initially just encapsulate the pointer dereferences
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit 5a388453e0cb038fa3ed5fb46f972470f7793566)

commit fab20658b9a4d04e2eab89d95b6eb7e04187424d
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 4 12:10:03 2019 +0200

    tdb: Rename tdb_oob() to tdb_notrans_oob()
    
    tdb_oob() will become a public function encapsulating the pointer
    dereferences.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit 885ba572efaac6c20388b8e119315c837e8f5236)

-----------------------------------------------------------------------

Summary of changes:
 lib/tdb/ABI/{tdb-1.3.17.sigs => tdb-1.4.2.sigs} |  0
 lib/tdb/common/check.c                          |  6 ++---
 lib/tdb/common/freelist.c                       |  2 +-
 lib/tdb/common/io.c                             | 33 ++++++++++++++++---------
 lib/tdb/common/open.c                           |  6 ++---
 lib/tdb/common/rescue.c                         |  4 +--
 lib/tdb/common/tdb_private.h                    | 13 ++++++++++
 lib/tdb/common/transaction.c                    |  7 +++++-
 lib/tdb/common/traverse.c                       |  3 +--
 lib/tdb/test/run-3G-file.c                      |  2 +-
 lib/tdb/wscript                                 |  2 +-
 11 files changed, 53 insertions(+), 25 deletions(-)
 copy lib/tdb/ABI/{tdb-1.3.17.sigs => tdb-1.4.2.sigs} (100%)


Changeset truncated at 500 lines:

diff --git a/lib/tdb/ABI/tdb-1.3.17.sigs b/lib/tdb/ABI/tdb-1.4.2.sigs
similarity index 100%
copy from lib/tdb/ABI/tdb-1.3.17.sigs
copy to lib/tdb/ABI/tdb-1.4.2.sigs
diff --git a/lib/tdb/common/check.c b/lib/tdb/common/check.c
index 3a5c8b8ba94..d7741f6b2f9 100644
--- a/lib/tdb/common/check.c
+++ b/lib/tdb/common/check.c
@@ -94,7 +94,7 @@ static bool tdb_check_record(struct tdb_context *tdb,
 			 off, rec->next));
 		goto corrupt;
 	}
-	if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0))
+	if (tdb_oob(tdb, rec->next, sizeof(*rec), 0))
 		goto corrupt;
 
 	/* Check rec_len: similar to rec->next, implies next record. */
@@ -112,7 +112,7 @@ static bool tdb_check_record(struct tdb_context *tdb,
 		goto corrupt;
 	}
 	/* OOB allows "right at the end" access, so this works for last rec. */
-	if (tdb->methods->tdb_oob(tdb, off, sizeof(*rec)+rec->rec_len, 0))
+	if (tdb_oob(tdb, off, sizeof(*rec)+rec->rec_len, 0))
 		goto corrupt;
 
 	/* Check tailer. */
@@ -362,7 +362,7 @@ _PUBLIC_ int tdb_check(struct tdb_context *tdb,
 	}
 
 	/* Make sure we know true size of the underlying file. */
-	tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1);
+	tdb_oob(tdb, tdb->map_size, 1, 1);
 
 	/* Header must be OK: also gets us the recovery ptr, if any. */
 	if (!tdb_check_header(tdb, &recovery_start))
diff --git a/lib/tdb/common/freelist.c b/lib/tdb/common/freelist.c
index 37a4c168533..046c747cf9b 100644
--- a/lib/tdb/common/freelist.c
+++ b/lib/tdb/common/freelist.c
@@ -50,7 +50,7 @@ int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off, struct tdb_record
 			   rec->magic, off));
 		return -1;
 	}
-	if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0) != 0)
+	if (tdb_oob(tdb, rec->next, sizeof(*rec), 0) != 0)
 		return -1;
 	return 0;
 }
diff --git a/lib/tdb/common/io.c b/lib/tdb/common/io.c
index df460176159..0de0dabd827 100644
--- a/lib/tdb/common/io.c
+++ b/lib/tdb/common/io.c
@@ -136,8 +136,8 @@ static int tdb_fstat(struct tdb_context *tdb, struct stat *buf)
    see if the database has been expanded by someone else and expand
    if necessary
 */
-static int tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len,
-		   int probe)
+static int tdb_notrans_oob(
+	struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe)
 {
 	struct stat st;
 	if (len + off < len) {
@@ -150,6 +150,11 @@ static int tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len,
 		return -1;
 	}
 
+	/*
+	 * This duplicates functionality from tdb_oob(). Don't remove:
+	 * we still have direct callers of tdb->methods->tdb_oob()
+	 * inside transaction.c.
+	 */
 	if (off + len <= tdb->map_size)
 		return 0;
 	if (tdb->flags & TDB_INTERNAL) {
@@ -216,7 +221,7 @@ static int tdb_write(struct tdb_context *tdb, tdb_off_t off,
 		return -1;
 	}
 
-	if (tdb->methods->tdb_oob(tdb, off, len, 0) != 0)
+	if (tdb_oob(tdb, off, len, 0) != 0)
 		return -1;
 
 	if (tdb->map_ptr) {
@@ -271,7 +276,7 @@ void *tdb_convert(void *buf, uint32_t size)
 static int tdb_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 		    tdb_len_t len, int cv)
 {
-	if (tdb->methods->tdb_oob(tdb, off, len, 0) != 0) {
+	if (tdb_oob(tdb, off, len, 0) != 0) {
 		return -1;
 	}
 
@@ -596,7 +601,7 @@ int tdb_expand(struct tdb_context *tdb, tdb_off_t size)
 	}
 
 	/* must know about any previous expansions by another process */
-	tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1);
+	tdb_oob(tdb, tdb->map_size, 1, 1);
 
 	/*
 	 * Note: that we don't care about tdb->hdr_ofs != 0 here
@@ -662,6 +667,12 @@ int tdb_expand(struct tdb_context *tdb, tdb_off_t size)
 	return -1;
 }
 
+int _tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe)
+{
+	int ret = tdb->methods->tdb_oob(tdb, off, len, probe);
+	return ret;
+}
+
 /* read/write a tdb_off_t */
 int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d)
 {
@@ -714,7 +725,7 @@ int tdb_parse_data(struct tdb_context *tdb, TDB_DATA key,
 		 * Optimize by avoiding the malloc/memcpy/free, point the
 		 * parser directly at the mmap area.
 		 */
-		if (tdb->methods->tdb_oob(tdb, offset, len, 0) != 0) {
+		if (tdb_oob(tdb, offset, len, 0) != 0) {
 			return -1;
 		}
 		data.dptr = offset + (unsigned char *)tdb->map_ptr;
@@ -756,20 +767,20 @@ int tdb_rec_read(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *r
 		return -1;
 	}
 
-	ret = tdb->methods->tdb_oob(tdb, offset, rec->key_len, 1);
+	ret = tdb_oob(tdb, offset, rec->key_len, 1);
 	if (ret == -1) {
 		return -1;
 	}
-	ret = tdb->methods->tdb_oob(tdb, offset, rec->data_len, 1);
+	ret = tdb_oob(tdb, offset, rec->data_len, 1);
 	if (ret == -1) {
 		return -1;
 	}
-	ret = tdb->methods->tdb_oob(tdb, offset, rec->rec_len, 1);
+	ret = tdb_oob(tdb, offset, rec->rec_len, 1);
 	if (ret == -1) {
 		return -1;
 	}
 
-	return tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0);
+	return tdb_oob(tdb, rec->next, sizeof(*rec), 0);
 }
 
 int tdb_rec_write(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec)
@@ -782,7 +793,7 @@ static const struct tdb_methods io_methods = {
 	tdb_read,
 	tdb_write,
 	tdb_next_hash_chain,
-	tdb_oob,
+	tdb_notrans_oob,
 	tdb_expand_file,
 };
 
diff --git a/lib/tdb/common/open.c b/lib/tdb/common/open.c
index dd5783ef8bc..f7f65b0e237 100644
--- a/lib/tdb/common/open.c
+++ b/lib/tdb/common/open.c
@@ -655,7 +655,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int td
 	 * As this skips tdb->hdr_ofs.
 	 */
 	tdb->map_size = 0;
-	ret = tdb->methods->tdb_oob(tdb, 0, 1, 0);
+	ret = tdb_oob(tdb, 0, 1, 0);
 	if (ret == -1) {
 		errno = EIO;
 		goto fail;
@@ -677,7 +677,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int td
 		goto fail;
 	}
 
-	ret = tdb->methods->tdb_oob(tdb, FREELIST_TOP, 4*tdb->hash_size, 1);
+	ret = tdb_oob(tdb, FREELIST_TOP, 4*tdb->hash_size, 1);
 	if (ret == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_open_ex: "
 			 "hash size %"PRIu32" does not fit\n", tdb->hash_size));
@@ -895,7 +895,7 @@ static int tdb_reopen_internal(struct tdb_context *tdb, bool active_lock)
 	 * As this skips tdb->hdr_ofs.
 	 */
 	tdb->map_size = 0;
-	if (tdb->methods->tdb_oob(tdb, 0, 1, 0) != 0) {
+	if (tdb_oob(tdb, 0, 1, 0) != 0) {
 		goto fail;
 	}
 #endif /* fake pread or pwrite */
diff --git a/lib/tdb/common/rescue.c b/lib/tdb/common/rescue.c
index e608db41dea..7a85ebc9311 100644
--- a/lib/tdb/common/rescue.c
+++ b/lib/tdb/common/rescue.c
@@ -60,7 +60,7 @@ static bool looks_like_valid_record(struct tdb_context *tdb,
 	if (rec->next > 0 && rec->next < TDB_DATA_START(tdb->hash_size))
 		return false;
 
-	if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 1))
+	if (tdb_oob(tdb, rec->next, sizeof(*rec), 1))
 		return false;
 
 	key->dsize = rec->key_len;
@@ -228,7 +228,7 @@ _PUBLIC_ int tdb_rescue(struct tdb_context *tdb,
 	}
 
 	/* Make sure we know true size of the underlying file. */
-	tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1);
+	tdb_oob(tdb, tdb->map_size, 1, 1);
 
 	/* Suppress logging, since we anticipate errors. */
 	tdb->log.log_fn = logging_suppressed;
diff --git a/lib/tdb/common/tdb_private.h b/lib/tdb/common/tdb_private.h
index 42aaac62f59..29790434211 100644
--- a/lib/tdb/common/tdb_private.h
+++ b/lib/tdb/common/tdb_private.h
@@ -304,6 +304,19 @@ void *tdb_convert(void *buf, uint32_t size);
 int tdb_free(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec);
 tdb_off_t tdb_allocate(struct tdb_context *tdb, int hash, tdb_len_t length,
 		       struct tdb_record *rec);
+
+int _tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe);
+
+static inline int tdb_oob(
+	struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe)
+{
+	if (likely((off + len >= off) && (off + len <= tdb->map_size))) {
+		return 0;
+	}
+	return _tdb_oob(tdb, off, len, probe);
+}
+
+
 int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d);
 int tdb_ofs_write(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d);
 int tdb_lock_record(struct tdb_context *tdb, tdb_off_t off);
diff --git a/lib/tdb/common/transaction.c b/lib/tdb/common/transaction.c
index e9b0b26ea59..4f8d1f8cdcc 100644
--- a/lib/tdb/common/transaction.c
+++ b/lib/tdb/common/transaction.c
@@ -378,6 +378,11 @@ static void transaction_next_hash_chain(struct tdb_context *tdb, uint32_t *chain
 static int transaction_oob(struct tdb_context *tdb, tdb_off_t off,
 			   tdb_len_t len, int probe)
 {
+	/*
+	 * This duplicates functionality from tdb_oob(). Don't remove:
+	 * we still have direct callers of tdb->methods->tdb_oob()
+	 * inside transaction.c.
+	 */
 	if (off + len >= off && off + len <= tdb->map_size) {
 		return 0;
 	}
@@ -524,7 +529,7 @@ static int _tdb_transaction_start(struct tdb_context *tdb,
 
 	/* make sure we know about any file expansions already done by
 	   anyone else */
-	tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1);
+	tdb_oob(tdb, tdb->map_size, 1, 1);
 	tdb->transaction->old_map_size = tdb->map_size;
 
 	/* finally hook the io methods, replacing them with
diff --git a/lib/tdb/common/traverse.c b/lib/tdb/common/traverse.c
index 54a69dc8d03..d69e7dff285 100644
--- a/lib/tdb/common/traverse.c
+++ b/lib/tdb/common/traverse.c
@@ -453,8 +453,7 @@ _PUBLIC_ int tdb_traverse_chain(struct tdb_context *tdb,
 
 			if ((tdb->transaction == NULL) &&
 			    (tdb->map_ptr != NULL)) {
-				ret = tdb->methods->tdb_oob(
-					tdb, key_ofs, full_len, 0);
+				ret = tdb_oob(tdb, key_ofs, full_len, 0);
 				if (ret == -1) {
 					goto fail;
 				}
diff --git a/lib/tdb/test/run-3G-file.c b/lib/tdb/test/run-3G-file.c
index 748c972284a..79e291b294e 100644
--- a/lib/tdb/test/run-3G-file.c
+++ b/lib/tdb/test/run-3G-file.c
@@ -48,7 +48,7 @@ static const struct tdb_methods large_io_methods = {
 	tdb_read,
 	tdb_write,
 	tdb_next_hash_chain,
-	tdb_oob,
+	tdb_notrans_oob,
 	tdb_expand_file_sparse
 };
 
diff --git a/lib/tdb/wscript b/lib/tdb/wscript
index ece44f82e33..1ab0e8d334a 100644
--- a/lib/tdb/wscript
+++ b/lib/tdb/wscript
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'tdb'
-VERSION = '1.4.1'
+VERSION = '1.4.2'
 
 import sys, os
 


-- 
Samba Shared Repository



More information about the samba-cvs mailing list