]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
copy: do not treat unwritten extents specially: avoid XFS/ext4 data loss
authorJim Meyering <meyering@redhat.com>
Wed, 20 Apr 2011 08:15:15 +0000 (10:15 +0200)
committerJim Meyering <meyering@redhat.com>
Wed, 20 Apr 2011 16:48:38 +0000 (18:48 +0200)
* src/copy.c (extent_copy): Do not treat "unwritten extents" specially.
Otherwise, with a release-candidate 2.6.39-rc3 kernel, XFS or ext4,
when using gold as your linker, and if you forget to run "make check",
you could end up installing files full of zeros instead of the expected
binaries.  For a lot of discussion, see
http://thread.gmane.org/gmane.comp.file-systems.xfs.general/37895
* tests/cp/fiemap-empty: Disable this test.

src/copy.c
tests/cp/fiemap-empty

index 9b53127c4556fd7a8341d4660b012804f08abef1..f6f9ea6f2ed96eefe77949780f084c5b2969132a 100644 (file)
@@ -398,7 +398,10 @@ extent_copy (int src_fd, int dest_fd, char *buf, size_t buf_size,
           /* Treat an unwritten but allocated extent much like a hole.
              I.E. don't read, but don't convert to a hole in the destination,
              unless SPARSE_ALWAYS.  */
-          if (scan.ext_info[i].ext_flags & FIEMAP_EXTENT_UNWRITTEN)
+          /* For now, do not treat FIEMAP_EXTENT_UNWRITTEN specially,
+             because that (in combination with no sync) would lead to data
+             loss at least on XFS and ext4 when using 2.6.39-rc3 kernels.  */
+          if (0 && (scan.ext_info[i].ext_flags & FIEMAP_EXTENT_UNWRITTEN))
             {
               empty_extent = true;
               last_ext_len = 0;
index 64c3254c79b5cfbd6315ab8523f12782c88cd38b..836668ef7c2f06fc6ce6c0eed66e07916ff1be0b 100755 (executable)
 . "${srcdir=.}/init.sh"; path_prepend_ ../src
 print_ver_ cp
 
+# FIXME: enable any part of this test that is still relevant,
+# or, if none are relevant (now that cp does not handle unwritten
+# extents), just remove the test altogether.
+skip_test_ 'disabled for now'
+
 touch fiemap_chk
 fiemap_capable_ fiemap_chk ||
   skip_test_ 'this file system lacks FIEMAP support'