[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Fri Jul 9 00:51:14 MDT 2010


The branch, master has been updated
       via  1c0cb36... s3: Optimize the write cache for sequential writes
      from  6a0d366... s4: fix warning: unused variable ‘i’

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


- Log -----------------------------------------------------------------
commit 1c0cb365a895ce670fc32db3380cee7f129ce95b
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jul 7 21:50:23 2010 +0200

    s3: Optimize the write cache for sequential writes
    
    In case of the one-byte allocating writes we don't work work optimally because
    we start the write cache at the current offset. This patch tries to avoid this
    case.

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

Summary of changes:
 source3/smbd/fileio.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c
index 92b7d3e..92757f7 100644
--- a/source3/smbd/fileio.c
+++ b/source3/smbd/fileio.c
@@ -796,6 +796,26 @@ n = %u, wcp->offset=%.0f, wcp->data_size=%u\n",
 			DO_PROFILE_INC(writecache_init_writes);
 		}
 #endif
+
+		if ((wcp->data_size == 0)
+		    && (pos > wcp->file_size)
+		    && (pos + n <= wcp->file_size + wcp->alloc_size)) {
+			/*
+			 * This is a write completely beyond the
+			 * current EOF, but within reach of the write
+			 * cache. We expect fill-up writes pretty
+			 * soon, so it does not make sense to start
+			 * the write cache at the current
+			 * offset. These fill-up writes would trigger
+			 * separate pwrites or even unnecessary cache
+			 * flushes because they overlap if this is a
+			 * one-byte allocating write.
+			 */
+			wcp->offset = wcp->file_size;
+			wcp->data_size = pos - wcp->file_size;
+			memset(wcp->data, 0, wcp->data_size);
+		}
+
 		memcpy(wcp->data+wcp->data_size, data, n);
 		if (wcp->data_size == 0) {
 			wcp->offset = pos;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list