1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

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.
This commit is contained in:
Volker Lendecke
2010-07-07 21:50:23 +02:00
parent 6a0d3665e2
commit 1c0cb365a8

View File

@ -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;