This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] copy_file_range: New function to copy file data
On 11/23/2017 04:46 PM, Andreas Schwab wrote:
On Nov 23 2017, Florian Weimer <fweimer@redhat.com> wrote:
On 11/23/2017 04:39 PM, Andreas Schwab wrote:
On Nov 23 2017, Florian Weimer <fweimer@redhat.com> wrote:
I don't think write can ever return 0 when writing more than zero bytes.
I can drop the check. With the Linux VFS layer, it is difficult to tell
whether this condition can ever happen, and if it does, we would likely
enter an infinite loop without the check.
> Or we get the real error in the next loop.
Tradition has it that it's a replacement for the ENOSPC condition,
A short write, yes, but not a zero write.
Looking at _IO_new_file_write in libio/fileops.c (which is where a call
to fwrite eventually ends up if the buffer is full):
_IO_ssize_t to_do = n;
while (to_do > 0)
{
_IO_ssize_t count = (__builtin_expect (f->_flags2
& _IO_FLAGS2_NOTCANCEL, 0)
? __write_nocancel (f->_fileno, data, to_do)
: __write (f->_fileno, data, to_do));
if (count < 0)
{
f->_flags |= _IO_ERR_SEEN;
break;
}
to_do -= count;
data = (void *) ((char *) data + count);
}
I see that we do not have a count == 0 special case there, so I'm going
to drop the check from copy_file_range, as you proposed.
Thanks,
Florian