2.6.3: write error goes undetected

Jim Meyering jim at meyering.net
Thu Dec 2 16:53:00 GMT 2004


Hello,

[ I've just reported this as
  https://bugzilla.samba.org/show_bug.cgi?id=2116 ]
------------------

rsync-2.6.3 can fail to report a write error.
Here's a demonstration, writing to a full partition:

You can reproduce it like this:

  $ echo foo > in
  $ strace -f -o log rsync in /full/tmp
  $ grep 'write.*ENOSP' log
  4787  write(1, "foo\n", 4)              = -1 ENOSPC (No space left on device)
  $ rsync --version|head -n1
  rsync  version 2.6.3  protocol version 28

The cause seems to be this unchecked flush_write_file call:

Index: receiver.c
===================================================================
RCS file: /cvsroot/rsync/receiver.c,v
retrieving revision 1.110
diff -u -p -r1.110 receiver.c
--- receiver.c	27 Nov 2004 17:56:58 -0000	1.110
+++ receiver.c	2 Dec 2004 16:40:23 -0000
@@ -289,7 +289,8 @@ static int receive_data(int f_in, char *
 		offset += len;
 	}

-	flush_write_file(fd);
+	if (flush_write_file(fd) < 0)
+		goto report_write_error;

 #ifdef HAVE_FTRUNCATE
 	if (inplace && fd != -1)

The above patch is relative to the latest CVS sources on the trunk.
With the above knee-jerk patch, I do get the write error I want,
but also some other probably undesirable diagnostics:

  $ ./rsync in /full/tmp
  rsync: write failed on "/full/tmp/in": No space left on device (28)
  rsync error: error in file IO (code 11) at receiver.c(307)
  rsync: connection unexpectedly closed (25 bytes received so far) [generator]
  rsync error: error in rsync protocol data stream (code 12) at io.c(362)
  rsync: connection unexpectedly closed (32 bytes received so far) [sender]
  rsync error: error in rsync protocol data stream (code 12) at io.c(362)
  [Exit 12]


More information about the rsync mailing list