[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Sat Dec 14 05:20:04 MST 2013


The branch, master has been updated
       via  f3556bd tdb: Avoid reallocs for lockrecs
       via  2a77e61 smbd: Early exit
       via  5baa740 smbd: Implement and use full_path_tos
       via  7a06b16 smbd: Avoid pointless strcsequal calls
       via  706c4de dbwrap: No lock_order check if not required
       via  95bfc15 dbwrap_cache: Check negative first
       via  a31d08f dbwrap_cache: Fix dbwrap_cache_validate
       via  7ae77a5 smbd: Simplify get_share_mode_lock a bit
       via  fd94f82 dbwrap: Avoid a stackframe in fetch_locked_internal
       via  70dfb51 iconv: Use a static buffer in iconf not to spoil the talloc_pool
       via  a9753c1 smbd: Fix a false DEBUG fn name
       via  92f9aac torture3: Do not depend on epoll
      from  eaf807c secacl: Slightly simplify make_sec_acl

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f3556bd03bf9dfa16fb00d85da1a2c065cb0e522
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Dec 9 09:56:33 2013 +0000

    tdb: Avoid reallocs for lockrecs
    
    In normal operations we have at most 3 entries in this array. Don't
    bother with shrinking.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Sat Dec 14 13:19:47 CET 2013 on sn-devel-104

commit 2a77e613cb0ca6402b5401ef9bde7a06a07ba91c
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 10:31:22 2013 +0000

    smbd: Early exit
    
    Yes, this also showed up in profiles
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 5baa7402ba8eebd9b2ddc6b259ae9bb2852b4bb1
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 14:34:05 2013 +0000

    smbd: Implement and use full_path_tos
    
    Yes, this looks like a hack, but talloc_asprintf does show up high in
    profiles called from these routines
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 7a06b1661c1423780f05bc35ea435003712ca4b5
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 12:10:37 2013 +0000

    smbd: Avoid pointless strcsequal calls
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 706c4deca142ce1363da54ab4806337726e6a50c
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 11:57:42 2013 +0000

    dbwrap: No lock_order check if not required
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 95bfc1568648d03d5f03ab3f720a961dbc4d6cd5
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Dec 7 12:58:43 2013 +0000

    dbwrap_cache: Check negative first
    
    dbwrap_cache is right now used for notify most, and we hope to have very
    few notifies around. So negative hits will be more likely than positive
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit a31d08feeb65bd3b4ff175c8096fb23f8d496789
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Dec 7 12:58:07 2013 +0000

    dbwrap_cache: Fix dbwrap_cache_validate
    
    Classic brown paper bag bug :-(
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 7ae77a5d265e5ac4d1006528a178c1d777599f39
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 07:40:03 2013 +0000

    smbd: Simplify get_share_mode_lock a bit
    
    This does two things: It gets rid of a talloc_stackframe in a hot
    code path and to me it makes the code easier to understand. It makes
    the talloc hierarchy more obvious to follow.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit fd94f8248198dc943f8b3107b944e971b5e742ce
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 11:38:12 2013 +0000

    dbwrap: Avoid a stackframe in fetch_locked_internal
    
    This shows in profiles. We call this so often that this is a pretty
    hot code path.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 70dfb51430bc3b6e436fb5c5452d7ef8612ca02f
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 6 10:31:07 2013 +0000

    iconv: Use a static buffer in iconf not to spoil the talloc_pool
    
    This is a buffer that is strictly used like a stack variable. This
    patch makes it one and while there it fixes an error path memleak.
    In the "pull_failed" case we did not talloc_free(cvtbuf). With
    talloc_tos(), this does not really matter, but for code without
    this it does.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit a9753c180fbd06764987367fe3115159cdef4330
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Dec 8 16:41:04 2013 +0000

    smbd: Fix a false DEBUG fn name
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 92f9aac82867fb35a3892f4f2b63a2c9d32711fc
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 13 14:55:45 2013 +0100

    torture3: Do not depend on epoll
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

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

Summary of changes:
 lib/dbwrap/dbwrap.c               |   24 ++++-----------
 lib/dbwrap/dbwrap_cache.c         |   22 +++++++++++---
 lib/tdb/common/lock.c             |   32 +++++++++-----------
 lib/tdb/common/open.c             |    1 +
 lib/tdb/common/tdb_private.h      |    1 +
 lib/util/charset/iconv.c          |   16 +---------
 source3/locking/brlock.c          |    8 ++++-
 source3/locking/share_mode_lock.c |   27 ++++++++---------
 source3/smbd/files.c              |   58 +++++++++++++++++++++++++++++++------
 source3/smbd/notify.c             |   14 +++++----
 source3/smbd/proto.h              |    3 ++
 source3/smbd/trans2.c             |    4 +-
 source3/smbd/vfs.c                |    2 +-
 source3/torture/torture.c         |    2 +-
 14 files changed, 126 insertions(+), 88 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c
index 44e20bc..8270b63 100644
--- a/lib/dbwrap/dbwrap.c
+++ b/lib/dbwrap/dbwrap.c
@@ -167,15 +167,6 @@ static struct dbwrap_lock_order_state *dbwrap_check_lock_order(
 	static struct db_context *locked_dbs[DBWRAP_LOCK_ORDER_MAX];
 	struct dbwrap_lock_order_state *state = NULL;
 
-	if (db->lock_order == 0) {
-		/*
-		 * lock order 0 is for example for dbwrap_rbt without
-		 * real locking. Return state nevertheless to avoid
-		 * special cases.
-		 */
-		return talloc_zero(mem_ctx, struct dbwrap_lock_order_state);
-	}
-
 	if (db->lock_order > DBWRAP_LOCK_ORDER_MAX) {
 		DEBUG(0,("Invalid lock order %d of %s\n",
 			 (int)db->lock_order, db->name));
@@ -219,22 +210,21 @@ static struct db_record *dbwrap_fetch_locked_internal(
 				   TDB_DATA key))
 {
 	struct db_record *rec;
-	struct dbwrap_lock_order_state *lock_order;
-	TALLOC_CTX *frame = talloc_stackframe();
+	struct dbwrap_lock_order_state *lock_order = NULL;
 
-	lock_order = dbwrap_check_lock_order(db, frame);
-	if (lock_order == NULL) {
-		TALLOC_FREE(frame);
-		return NULL;
+	if (db->lock_order != 0) {
+		lock_order = dbwrap_check_lock_order(db, mem_ctx);
+		if (lock_order == NULL) {
+			return NULL;
+		}
 	}
 	rec = db_fn(db, mem_ctx, key);
 	if (rec == NULL) {
-		TALLOC_FREE(frame);
+		TALLOC_FREE(lock_order);
 		return NULL;
 	}
 	(void)talloc_steal(rec, lock_order);
 	rec->db = db;
-	TALLOC_FREE(frame);
 	return rec;
 }
 
diff --git a/lib/dbwrap/dbwrap_cache.c b/lib/dbwrap/dbwrap_cache.c
index d97242e..c5f7cce 100644
--- a/lib/dbwrap/dbwrap_cache.c
+++ b/lib/dbwrap/dbwrap_cache.c
@@ -32,15 +32,27 @@ struct db_cache_ctx {
 
 static bool dbwrap_cache_validate(struct db_cache_ctx *ctx)
 {
-	if (ctx->seqnum == dbwrap_get_seqnum(ctx->backing)) {
+	int backing_seqnum;
+
+	backing_seqnum = dbwrap_get_seqnum(ctx->backing);
+	if (backing_seqnum == ctx->seqnum) {
 		return true;
 	}
+
 	TALLOC_FREE(ctx->positive);
 	ctx->positive = db_open_rbt(ctx);
+	if (ctx->positive == NULL) {
+		return false;
+	}
+
 	TALLOC_FREE(ctx->negative);
 	ctx->negative = db_open_rbt(ctx);
+	if (ctx->negative == NULL) {
+		return false;
+	}
 
-	return ((ctx->positive != NULL) && (ctx->negative != NULL));
+	ctx->seqnum = backing_seqnum;
+	return true;
 }
 
 static NTSTATUS dbwrap_cache_parse_record(
@@ -57,13 +69,13 @@ static NTSTATUS dbwrap_cache_parse_record(
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	if (dbwrap_exists(ctx->negative, key)) {
+		return NT_STATUS_NOT_FOUND;
+	}
 	status = dbwrap_parse_record(ctx->positive, key, parser, private_data);
 	if (NT_STATUS_IS_OK(status)) {
 		return status;
 	}
-	if (dbwrap_exists(ctx->negative, key)) {
-		return NT_STATUS_NOT_FOUND;
-	}
 
 	status = dbwrap_fetch(ctx->backing, talloc_tos(), key, &value);
 
diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c
index 4dfefd5..486de79 100644
--- a/lib/tdb/common/lock.c
+++ b/lib/tdb/common/lock.c
@@ -297,14 +297,17 @@ int tdb_nest_lock(struct tdb_context *tdb, uint32_t offset, int ltype,
 		return 0;
 	}
 
-	new_lck = (struct tdb_lock_type *)realloc(
-		tdb->lockrecs,
-		sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
-	if (new_lck == NULL) {
-		errno = ENOMEM;
-		return -1;
+	if (tdb->num_lockrecs == tdb->lockrecs_array_length) {
+		new_lck = (struct tdb_lock_type *)realloc(
+			tdb->lockrecs,
+			sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
+		if (new_lck == NULL) {
+			errno = ENOMEM;
+			return -1;
+		}
+		tdb->lockrecs_array_length = tdb->num_lockrecs+1;
+		tdb->lockrecs = new_lck;
 	}
-	tdb->lockrecs = new_lck;
 
 	/* Since fcntl locks don't nest, we do a lock for the first one,
 	   and simply bump the count for future ones */
@@ -312,9 +315,11 @@ int tdb_nest_lock(struct tdb_context *tdb, uint32_t offset, int ltype,
 		return -1;
 	}
 
-	tdb->lockrecs[tdb->num_lockrecs].off = offset;
-	tdb->lockrecs[tdb->num_lockrecs].count = 1;
-	tdb->lockrecs[tdb->num_lockrecs].ltype = ltype;
+	new_lck = &tdb->lockrecs[tdb->num_lockrecs];
+
+	new_lck->off = offset;
+	new_lck->count = 1;
+	new_lck->ltype = ltype;
 	tdb->num_lockrecs++;
 
 	return 0;
@@ -481,10 +486,6 @@ int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype,
 	 * a completely idle tdb we should get rid of the locked array.
 	 */
 
-	if (tdb->num_lockrecs == 0) {
-		SAFE_FREE(tdb->lockrecs);
-	}
-
 	if (ret)
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlock: An error occurred unlocking!\n"));
 	return ret;
@@ -894,9 +895,6 @@ void tdb_release_transaction_locks(struct tdb_context *tdb)
 		}
 	}
 	tdb->num_lockrecs = active;
-	if (tdb->num_lockrecs == 0) {
-		SAFE_FREE(tdb->lockrecs);
-	}
 }
 
 /* Following functions are added specifically to support CTDB. */
diff --git a/lib/tdb/common/open.c b/lib/tdb/common/open.c
index 05d7cae..6ff37ca 100644
--- a/lib/tdb/common/open.c
+++ b/lib/tdb/common/open.c
@@ -629,6 +629,7 @@ static int tdb_reopen_internal(struct tdb_context *tdb, bool active_lock)
 	/* We may still think we hold the active lock. */
 	tdb->num_lockrecs = 0;
 	SAFE_FREE(tdb->lockrecs);
+	tdb->lockrecs_array_length = 0;
 
 	if (active_lock && tdb_nest_lock(tdb, ACTIVE_LOCK, F_RDLCK, TDB_LOCK_WAIT) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_reopen: failed to obtain active lock\n"));
diff --git a/lib/tdb/common/tdb_private.h b/lib/tdb/common/tdb_private.h
index ce92188..7227b43 100644
--- a/lib/tdb/common/tdb_private.h
+++ b/lib/tdb/common/tdb_private.h
@@ -197,6 +197,7 @@ struct tdb_context {
 	struct tdb_lock_type allrecord_lock; /* .offset == upgradable */
 	int num_lockrecs;
 	struct tdb_lock_type *lockrecs; /* only real locks, all with count>0 */
+	int lockrecs_array_length;
 	enum TDB_ERROR ecode; /* error code for last tdb error */
 	uint32_t hash_size;
 	uint32_t flags; /* the flags passed to tdb_open */
diff --git a/lib/util/charset/iconv.c b/lib/util/charset/iconv.c
index 1c507b4..c5b45fe 100644
--- a/lib/util/charset/iconv.c
+++ b/lib/util/charset/iconv.c
@@ -127,20 +127,8 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
 #ifndef SMB_ICONV_BUFSIZE
 #define SMB_ICONV_BUFSIZE 2048
 #endif
-		TALLOC_CTX *mem_ctx;
 		size_t bufsize;
-		char *cvtbuf;
-
-#if _SAMBA_BUILD_ == 3
-		mem_ctx = talloc_tos();
-#else
-		mem_ctx = cd;
-#endif
-		cvtbuf = talloc_array(mem_ctx, char, SMB_ICONV_BUFSIZE);
-
-		if (!cvtbuf) {
-			return (size_t)-1;
-		}
+		char cvtbuf[SMB_ICONV_BUFSIZE];
 
 		while (*inbytesleft > 0) {
 			char *bufp1 = cvtbuf;
@@ -161,7 +149,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
 			if (cd->push(cd->cd_push,
 				     &bufp2, &bufsize,
 				     outbuf, outbytesleft) == -1) {
-				talloc_free(cvtbuf);
 				return -1;
 			} else if (pull_failed) {
 				/* We want the pull errno if possible */
@@ -169,7 +156,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
 				return -1;
 			}
 		}
-		talloc_free(cvtbuf);
 	}
 
 	return 0;
diff --git a/source3/locking/brlock.c b/source3/locking/brlock.c
index e92a2cf..c51d66b 100644
--- a/source3/locking/brlock.c
+++ b/source3/locking/brlock.c
@@ -1699,10 +1699,16 @@ static bool validate_lock_entries(TALLOC_CTX *mem_ctx,
 	unsigned int i;
 	unsigned int num_valid_entries = 0;
 	struct lock_struct *locks = *pplocks;
-	TALLOC_CTX *frame = talloc_stackframe();
+	TALLOC_CTX *frame;
 	struct server_id *ids;
 	bool *exists;
 
+	if (*pnum_entries == 0) {
+		return true;
+	}
+
+	frame = talloc_stackframe();
+
 	ids = talloc_array(frame, struct server_id, *pnum_entries);
 	if (ids == NULL) {
 		DEBUG(0, ("validate_lock_entries: "
diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c
index 5d7a08c..940d125 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -369,36 +369,35 @@ struct share_mode_lock *get_share_mode_lock(
 	const struct smb_filename *smb_fname,
 	const struct timespec *old_write_time)
 {
-	TALLOC_CTX *frame = talloc_stackframe();
-
 	struct share_mode_lock *lck;
 
+	lck = talloc(mem_ctx, struct share_mode_lock);
+	if (lck == NULL) {
+		DEBUG(1, ("talloc failed\n"));
+		return NULL;
+	}
+
 	if (the_lock == NULL) {
 		the_lock = get_share_mode_lock_internal(
-			frame, id, servicepath, smb_fname, old_write_time);
+			lck, id, servicepath, smb_fname, old_write_time);
 		if (the_lock == NULL) {
 			goto fail;
 		}
 		talloc_set_destructor(the_lock, the_lock_destructor);
+	} else {
+		if (talloc_reference(lck, the_lock) == NULL) {
+			DEBUG(1, ("talloc_reference failed\n"));
+			goto fail;
+		}
 	}
 	if (!file_id_equal(&the_lock->data->id, &id)) {
 		DEBUG(1, ("Can not lock two share modes simultaneously\n"));
 		goto fail;
 	}
-	lck = talloc(mem_ctx, struct share_mode_lock);
-	if (lck == NULL) {
-		DEBUG(1, ("talloc failed\n"));
-		goto fail;
-	}
-	if (talloc_reference(lck, the_lock) == NULL) {
-		DEBUG(1, ("talloc_reference failed\n"));
-		goto fail;
-	}
 	lck->data = the_lock->data;
-	TALLOC_FREE(frame);
 	return lck;
 fail:
-	TALLOC_FREE(frame);
+	TALLOC_FREE(lck);
 	return NULL;
 }
 
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index c64c841..ba24eda 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -688,6 +688,45 @@ NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *from,
 	return fsp_set_smb_fname(to, from->fsp_name);
 }
 
+/*
+ * This routine improves performance for operations temporarily acting on a
+ * full path. It is equivalent to the much more expensive
+ *
+ * talloc_asprintf(talloc_tos(), "%s/%s", dir, name)
+ *
+ * This actually does make a difference in metadata-heavy workloads (i.e. the
+ * "standard" client.txt nbench run.
+ */
+
+ssize_t full_path_tos(const char *dir, const char *name,
+		      char *tmpbuf, size_t tmpbuf_len,
+		      char **pdst, char **to_free)
+{
+	size_t dirlen, namelen, len;
+	char *dst;
+
+	dirlen = strlen(dir);
+	namelen = strlen(name);
+	len = dirlen + namelen + 1;
+
+	if (len < tmpbuf_len) {
+		dst = tmpbuf;
+		*to_free = NULL;
+	} else {
+		dst = talloc_array(talloc_tos(), char, len+1);
+		if (dst == NULL) {
+			return -1;
+		}
+		*to_free = dst;
+	}
+
+	memcpy(dst, dir, dirlen);
+	dst[dirlen] = '/';
+	memcpy(dst+dirlen+1, name, namelen+1);
+	*pdst = dst;
+	return len;
+}
+
 /**
  * Return a jenkins hash of a pathname on a connection.
  */
@@ -695,23 +734,24 @@ NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *from,
 NTSTATUS file_name_hash(connection_struct *conn,
 			const char *name, uint32_t *p_name_hash)
 {
-	char *fullpath = NULL;
+	char tmpbuf[1024];
+	char *fullpath, *to_free;
+	size_t len;
 
 	/* Set the hash of the full pathname. */
-	fullpath = talloc_asprintf(talloc_tos(),
-			"%s/%s",
-			conn->connectpath,
-			name);
-	if (!fullpath) {
+
+	len = full_path_tos(conn->connectpath, name, tmpbuf, sizeof(tmpbuf),
+			    &fullpath, &to_free);
+	if (len == -1) {
 		return NT_STATUS_NO_MEMORY;
 	}
-	*p_name_hash = hash(fullpath, talloc_get_size(fullpath), 0);
+	*p_name_hash = hash(fullpath, len+1, 0);
 
 	DEBUG(10,("file_name_hash: %s hash 0x%x\n",
-		fullpath,
+		  fullpath,
 		(unsigned int)*p_name_hash ));
 
-	TALLOC_FREE(fullpath);
+	TALLOC_FREE(to_free);
 	return NT_STATUS_OK;
 }
 
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index 4842d6f..078bc99 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -418,19 +418,21 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
 		  const char *path)
 {
 	struct notify_context *notify_ctx = conn->sconn->notify_ctx;
-	char *fullpath;
+	char *fullpath, *to_free;
+	char tmpbuf[1024];
+	ssize_t len;
 
 	if (path[0] == '.' && path[1] == '/') {
 		path += 2;
 	}
-	fullpath = talloc_asprintf(talloc_tos(), "%s/%s", conn->connectpath,
-				   path);
-	if (fullpath == NULL) {
-		DEBUG(0, ("asprintf failed\n"));
+	len = full_path_tos(conn->connectpath, path, tmpbuf, sizeof(tmpbuf),
+			    &fullpath, &to_free);
+	if (len == -1) {
+		DEBUG(0, ("full_path_tos failed\n"));
 		return;
 	}
 	notify_trigger(notify_ctx, action, filter, fullpath);
-	TALLOC_FREE(fullpath);
+	TALLOC_FREE(to_free);
 }
 
 static void notify_fsp(files_struct *fsp, uint32 action, const char *name)
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index a550dd7..36012e6 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -397,6 +397,9 @@ NTSTATUS file_name_hash(connection_struct *conn,
 			const char *name, uint32_t *p_name_hash);
 NTSTATUS fsp_set_smb_fname(struct files_struct *fsp,
 			   const struct smb_filename *smb_fname_in);
+ssize_t full_path_tos(const char *dir, const char *name,
+		      char *tmpbuf, size_t tmpbuf_len,
+		      char **pdst, char **to_free);
 
 /* The following definitions come from smbd/ipc.c  */
 
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index e02d646..2667848 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -258,8 +258,8 @@ NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn,
 		return map_nt_error_from_unix(errno);
 	}
 
-	DEBUG(10, ("get_ea_list_from_file: ea_namelist size = %u\n",
-		   (unsigned int)sizeret));
+	DEBUG(10, ("%s: ea_namelist size = %u\n",
+		   __func__, (unsigned int)sizeret));
 
 	if (sizeret == 0) {
 		TALLOC_FREE(names);
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index a8e181a..44690c2 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -828,7 +828,7 @@ int vfs_ChDir(connection_struct *conn, const char *path)
 		LastDir = SMB_STRDUP("");
 	}
 
-	if (strcsequal(path,".")) {
+	if (ISDOT(path)) {
 		return 0;
 	}
 
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 6789d85..edb12b0 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -8921,7 +8921,7 @@ static bool run_local_wbclient(int dummy)
 
 	BlockSignals(True, SIGPIPE);
 
-	ev = tevent_context_init_byname(talloc_tos(), "epoll");
+	ev = tevent_context_init(talloc_tos());
 	if (ev == NULL) {
 		goto fail;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list