From a86cad3921c4a8ddbcab1929c825356aec4fe76a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 29 Jul 2010 14:21:14 +0200 Subject: Revert "s3: Avoid pwrite calls for the 1-byte writes with zero content" This reverts commit 6763730304627a58139450fd3e03a0ce48e31bb9. --- source3/smbd/fileio.c | 54 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 50 deletions(-) (limited to 'source3/smbd/fileio.c') diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c index e5a288822e..c6094f902b 100644 --- a/source3/smbd/fileio.c +++ b/source3/smbd/fileio.c @@ -649,31 +649,10 @@ nonop=%u allocated=%u active=%u direct=%u perfect=%u readhits=%u\n", */ flush_write_cache(fsp, WRITE_FLUSH); - - if (data[0] == '\0') { - /* - * This is a 1-byte write of a 0 - * beyond the EOF, the typical - * file-extending (and allocating, but - * we're using the write cache here) - * write done by Windows. We just have - * to ftruncate the file and rely on - * posix semantics to return zeros for - * non-written file data that is - * within the file length. - * - * We have to cheat the offset to make - * wcp_file_size_change do the right - * thing with the ftruncate call. - */ - wcp->offset = pos + 1; - wcp->data_size = 0; - } else { - wcp->offset = wcp->file_size; - wcp->data_size = pos - wcp->file_size + 1; - memset(wcp->data, '\0', wcp->data_size); - memcpy(wcp->data + wcp->data_size-1, data, 1); - } + wcp->offset = wcp->file_size; + wcp->data_size = pos - wcp->file_size + 1; + memset(wcp->data, '\0', wcp->data_size); + memcpy(wcp->data + wcp->data_size-1, data, 1); /* * Update the file size if changed. @@ -814,31 +793,6 @@ n = %u, wcp->offset=%.0f, wcp->data_size=%u\n", } #endif - if ((wcp->data_size == 0) - && (pos > wcp->file_size) - && (n == 1) - && (data[0] == '\0')) { - /* - * This is a 1-byte write of a 0 beyond the - * EOF, the typical file-extending (and - * allocating, but we're using the write cache - * here) write done by Windows. We just have - * to ftruncate the file and rely on posix - * semantics to return zeros for non-written - * file data that is within the file length. - * - * We have to cheat the offset to make - * wcp_file_size_change do the right thing - * with the ftruncate call. - */ - wcp->offset = pos+1; - wcp->data_size = 0; - if (wcp_file_size_change(fsp) == -1) { - return -1; - } - return 1; - } - if ((wcp->data_size == 0) && (pos > wcp->file_size) && (pos + n <= wcp->file_size + wcp->alloc_size)) { -- cgit