cp(1) versions 8.30 and 8.32 are compared with its --reflink=always option
and they have different semantic if the target-file (with zero sizes) must be
created when the cp --reflink=alaways fails with a cross-device link
error. As shown below.
$ cp --version | head -1
cp (GNU coreutils) 8.30
$ cp --reflink=always /mnt/scratch/original /mnt/test/test-029/copy
cp: failed to clone '/mnt/test/test-029/copy' from '/mnt/scratch/original': Invalid cross-device link
$ ls -l /mnt/test/test-029/copy
ls: cannot access '/mnt/test/test-029/copy': No such file or directory
$ cp --version | head -1
cp (GNU coreutils) 8.32
$ cp --reflink=always /mnt/scratch/original /mnt/test/test-029/copy;
cp: failed to clone '/mnt/test/test-029/copy' from '/mnt/scratch/original': Invalid cross-device link
$ ls -l /mnt/test/test-029/copy
-rw------- 1 root root 0 Jun 4 13:29 /mnt/test/test-029/copy
Reported-by: Wang Yugui <wangyugui@e16-tech.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
echo "reflink=always:"
cp --reflink=always $1 $2 >> $seqres.full 2>&1 || echo "cp reflink failed"
echo "reflink=always:"
cp --reflink=always $1 $2 >> $seqres.full 2>&1 || echo "cp reflink failed"
- # The failed target actually gets created by cp:
- ls $2 | _filter_testdir_and_scratch
+ # The failed target gets created with zero sizes by cp(1) version 8.32. But
+ # in older cp(1) version 8.30 target file is not created when the
+ # cp --reflink=always fails.
+ ls $2 >> $seqres.full 2>&1
}
echo "test reflinks across different devices"
}
echo "test reflinks across different devices"
42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-029/copy
reflink=always:
cp reflink failed
42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-029/copy
reflink=always:
cp reflink failed
test reflinks across different mountpoints of same device
reflink=auto:
42d69d1a6d333a7ebdf64792a555e392 SCRATCH_MNT/original
42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-029/copy
reflink=always:
cp reflink failed
test reflinks across different mountpoints of same device
reflink=auto:
42d69d1a6d333a7ebdf64792a555e392 SCRATCH_MNT/original
42d69d1a6d333a7ebdf64792a555e392 TEST_DIR/test-029/copy
reflink=always:
cp reflink failed