1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

Revert "s3: Avoid pwrite calls for the 1-byte writes with zero content"

This reverts commit 6763730304627a58139450fd3e03a0ce48e31bb9.
This commit is contained in:
Volker Lendecke 2010-07-29 14:21:14 +02:00
parent fec8505e0b
commit a86cad3921

View File

@ -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)) {