[SCM] Samba Shared Repository - branch v3-6-test updated

Karolin Seeger kseeger at samba.org
Sun Apr 7 13:48:27 MDT 2013


The branch, v3-6-test has been updated
       via  60a2fb5 Optimization suggested by Volker. Don't do a stat system call on normal read path.
      from  565d140 smbd: Tune "dir" a bit.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 60a2fb5ddac02376d82f323f2acb1211bb7929e3
Author: Jeremy Allison <jra at samba.org>
Date:   Mon Mar 25 09:54:50 2013 -0700

    Optimization suggested by Volker. Don't do a stat system call on normal read path.
    
    Only do it if we need it in the sendfile() path.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Thu Mar 28 17:51:22 CET 2013 on sn-devel-104
    
    Fix bug #9748 - Remove unneeded fstat system call from hot read path.

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

Summary of changes:
 source3/smbd/reply.c |   30 +++++++++++++++---------------
 1 files changed, 15 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index ffe128a..31f4e2f 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -3529,11 +3529,6 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req,
 	struct lock_struct lock;
 	int saved_errno = 0;
 
-	if(fsp_stat(fsp) == -1) {
-		reply_nterror(req, map_nt_error_from_unix(errno));
-		return;
-	}
-
 	init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
 	    (uint64_t)startpos, (uint64_t)smb_maxcnt, READ_LOCK,
 	    &lock);
@@ -3543,16 +3538,6 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req,
 		return;
 	}
 
-	if (!S_ISREG(fsp->fsp_name->st.st_ex_mode) ||
-			(startpos > fsp->fsp_name->st.st_ex_size)
-			|| (smb_maxcnt > (fsp->fsp_name->st.st_ex_size - startpos))) {
-		/*
-		 * We already know that we would do a short read, so don't
-		 * try the sendfile() path.
-		 */
-		goto nosendfile_read;
-	}
-
 	/*
 	 * We can only use sendfile on a non-chained packet
 	 * but we can use on a non-oplocked file. tridge proved this
@@ -3566,6 +3551,21 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req,
 		uint8 headerbuf[smb_size + 12 * 2];
 		DATA_BLOB header;
 
+		if(fsp_stat(fsp) == -1) {
+			reply_nterror(req, map_nt_error_from_unix(errno));
+			goto strict_unlock;
+		}
+
+		if (!S_ISREG(fsp->fsp_name->st.st_ex_mode) ||
+		    (startpos > fsp->fsp_name->st.st_ex_size) ||
+		    (smb_maxcnt > (fsp->fsp_name->st.st_ex_size - startpos))) {
+			/*
+			 * We already know that we would do a short read, so don't
+			 * try the sendfile() path.
+			 */
+			goto nosendfile_read;
+		}
+
 		/*
 		 * Set up the packet header before send. We
 		 * assume here the sendfile will work (get the


-- 
Samba Shared Repository


More information about the samba-cvs mailing list