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:
parent
fec8505e0b
commit
a86cad3921
@ -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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user