This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]