Message ID | dd10c332377f315cd17abc46e08f296b87aed31c.1709970025.git.anand.jain@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fstests: new test cases for generic group | expand |
On Sat, Mar 09, 2024 at 03:40:34PM +0530, Anand Jain wrote: > Given that ext4 also allows mounting of a cloned filesystem, the btrfs > test case btrfs/312, which assesses the functionality of cloned filesystem > support, can be refactored to be under the generic group. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> > --- > tests/btrfs/312 | 78 -------------------------------------- > tests/btrfs/312.out | 19 ---------- > tests/generic/740 | 88 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/740.out | 4 ++ > 4 files changed, 92 insertions(+), 97 deletions(-) > delete mode 100755 tests/btrfs/312 > delete mode 100644 tests/btrfs/312.out > create mode 100755 tests/generic/740 > create mode 100644 tests/generic/740.out > > diff --git a/tests/btrfs/312 b/tests/btrfs/312 > deleted file mode 100755 > index eedcf11a2308..000000000000 > --- a/tests/btrfs/312 > +++ /dev/null > @@ -1,78 +0,0 @@ > -#! /bin/bash > -# SPDX-License-Identifier: GPL-2.0 > -# Copyright (c) 2024 Oracle. All Rights Reserved. > -# > -# FS QA Test 312 > -# > -# On a clone a device check to see if tempfsid is activated. > -# > -. ./common/preamble > -_begin_fstest auto quick clone tempfsid > - > -_cleanup() > -{ > - cd / > - $UMOUNT_PROG $mnt1 > /dev/null 2>&1 > - rm -r -f $tmp.* > - rm -r -f $mnt1 > -} > - > -. ./common/filter.btrfs > -. ./common/reflink > - > -_supported_fs btrfs > -_require_scratch_dev_pool 2 > -_scratch_dev_pool_get 2 > -_require_btrfs_fs_feature temp_fsid > - > -mnt1=$TEST_DIR/$seq/mnt1 > -mkdir -p $mnt1 > - > -create_cloned_devices() > -{ > - local dev1=$1 > - local dev2=$2 > - > - echo -n Creating cloned device... > - _mkfs_dev -fq -b $((1024 * 1024 * 300)) $dev1 > - > - _mount $dev1 $SCRATCH_MNT > - > - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ > - _filter_xfs_io > - $UMOUNT_PROG $SCRATCH_MNT > - # device dump of $dev1 to $dev2 > - dd if=$dev1 of=$dev2 bs=300M count=1 conv=fsync status=none || \ > - _fail "dd failed: $?" > - echo done > -} > - > -mount_cloned_device() > -{ > - echo ---- $FUNCNAME ---- > - create_cloned_devices ${SCRATCH_DEV_NAME[0]} ${SCRATCH_DEV_NAME[1]} > - > - echo Mounting original device > - _mount ${SCRATCH_DEV_NAME[0]} $SCRATCH_MNT > - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ > - _filter_xfs_io > - check_fsid ${SCRATCH_DEV_NAME[0]} > - > - echo Mounting cloned device > - _mount ${SCRATCH_DEV_NAME[1]} $mnt1 || \ > - _fail "mount failed, tempfsid didn't work" > - > - echo cp reflink must fail > - _cp_reflink $SCRATCH_MNT/foo $mnt1/bar 2>&1 | \ > - _filter_testdir_and_scratch > - > - check_fsid ${SCRATCH_DEV_NAME[1]} > -} > - > -mount_cloned_device > - > -_scratch_dev_pool_put > - > -# success, all done > -status=0 > -exit > diff --git a/tests/btrfs/312.out b/tests/btrfs/312.out > deleted file mode 100644 > index b7de6ce3cc6e..000000000000 > --- a/tests/btrfs/312.out > +++ /dev/null > @@ -1,19 +0,0 @@ > -QA output created by 312 > ----- mount_cloned_device ---- > -Creating cloned device...wrote 9000/9000 bytes at offset 0 > -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > -done > -Mounting original device > -wrote 9000/9000 bytes at offset 0 > -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > -On disk fsid: FSID > -Metadata uuid: FSID > -Temp fsid: FSID > -Tempfsid status: 0 > -Mounting cloned device > -cp reflink must fail > -cp: failed to clone 'TEST_DIR/312/mnt1/bar' from 'SCRATCH_MNT/foo': Invalid cross-device link > -On disk fsid: FSID > -Metadata uuid: FSID > -Temp fsid: TEMPFSID > -Tempfsid status: 1 > diff --git a/tests/generic/740 b/tests/generic/740 > new file mode 100755 > index 000000000000..2b2bff96b8ec > --- /dev/null > +++ b/tests/generic/740 > @@ -0,0 +1,88 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Oracle. All Rights Reserved. > +# > +# FS QA Test 740 > +# > +# Set up a filesystem, create a clone, mount both, and verify if the cp reflink > +# operation between these two mounts fails. > +# > +. ./common/preamble > +_begin_fstest auto quick clone volume tempfsid > + > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > + > + $UMOUNT_PROG $mnt2 &> /dev/null > + rm -r -f $mnt2 > + _destroy_loop_device $loop_dev2 &> /dev/null > + rm -r -f $loop_file2 > + > + $UMOUNT_PROG $mnt1 &> /dev/null > + rm -r -f $mnt1 > + _destroy_loop_device $loop_dev1 &> /dev/null > + rm -r -f $loop_file1 > + > +} > + > +. ./common/filter > +. ./common/reflink > + > +# Modify as appropriate. > +_supported_fs btrfs ext4 If it only supports btrfs and ext4, then it's a "shared" case. Generally we use "_require_xxxx" to _notrun on fs which isn't supported, except a fs totally not be supported, we use "^$that_fs_name". As this test need loop device, so you might need the FSTYP is a local filesystem, so: _require_block_device $TEST_DEV And... > +_require_cp_reflink > +_require_test > +_require_loop > + > +[[ $FSTYP == "btrfs" ]] && _require_btrfs_fs_feature temp_fsid I'm wondering if we can have a common function likes _require_duplicated_fsid ? Then this function helps to avoid running this test on those fs which doesn't support (e.g. xfs can't mount duplicate UUID now?) e.g. _require_duplicate_fsid() { case $FSTYP: btrfs) _require_btrfs_fs_feature temp_fsid ;; ext4) # not sure, does it always supports that? ;; *) _notrun "$FSTYP can't be mounted with duplicate fsid" # not sure if need a real testing at here, likes mkfs # on an image file, copy it, then try to mount them? ;; esac } Any thoughts about this? Thanks, Zorro > + > +clone_filesystem() > +{ > + local dev1=$1 > + local dev2=$2 > + > + _mkfs_dev $dev1 > + > + _mount $dev1 $mnt1 > + $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo >> $seqres.full > + $UMOUNT_PROG $mnt1 > + > + # device dump of $dev1 to $dev2 > + dd if=$dev1 of=$dev2 conv=fsync status=none || _fail "dd failed: $?" > +} > + > +mnt1=$TEST_DIR/$seq/mnt1 > +rm -r -f $mnt1 > +mkdir -p $mnt1 > + > +mnt2=$TEST_DIR/$seq/mnt2 > +rm -r -f $mnt2 > +mkdir -p $mnt2 > + > +loop_file1="$TEST_DIR/$seq/image1" > +rm -r -f $loop_file1 > +truncate -s 300m "$loop_file1" > +loop_dev1=$(_create_loop_device "$loop_file1") > + > +loop_file2="$TEST_DIR/$seq/image2" > +rm -r -f $loop_file2 > +truncate -s 300m "$loop_file2" > +loop_dev2=$(_create_loop_device "$loop_file2") > + > +clone_filesystem ${loop_dev1} ${loop_dev2} > + > +# Mounting original device > +_mount $loop_dev1 $mnt1 > +$XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo | _filter_xfs_io > + > +# Mounting cloned device > +_mount $loop_dev2 $mnt2 || _fail "mount of cloned device failed" > + > +# cp reflink across two different filesystems must fail > +_cp_reflink $mnt1/foo $mnt2/bar 2>&1 | _filter_test_dir > + > +# success, all done > +status=0 > +exit > diff --git a/tests/generic/740.out b/tests/generic/740.out > new file mode 100644 > index 000000000000..6ca8bb7e1b21 > --- /dev/null > +++ b/tests/generic/740.out > @@ -0,0 +1,4 @@ > +QA output created by 740 > +wrote 9000/9000 bytes at offset 0 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +cp: failed to clone 'TEST_DIR/740/mnt2/bar' from 'TEST_DIR/740/mnt1/foo': Invalid cross-device link > -- > 2.39.3 > >
On 3/12/24 10:16, Zorro Lang wrote: > On Sat, Mar 09, 2024 at 03:40:34PM +0530, Anand Jain wrote: >> Given that ext4 also allows mounting of a cloned filesystem, the btrfs >> test case btrfs/312, which assesses the functionality of cloned filesystem >> support, can be refactored to be under the generic group. >> >> Signed-off-by: Anand Jain <anand.jain@oracle.com> >> --- >> tests/btrfs/312 | 78 -------------------------------------- >> tests/btrfs/312.out | 19 ---------- >> tests/generic/740 | 88 +++++++++++++++++++++++++++++++++++++++++++ >> tests/generic/740.out | 4 ++ >> 4 files changed, 92 insertions(+), 97 deletions(-) >> delete mode 100755 tests/btrfs/312 >> delete mode 100644 tests/btrfs/312.out >> create mode 100755 tests/generic/740 >> create mode 100644 tests/generic/740.out >> >> diff --git a/tests/btrfs/312 b/tests/btrfs/312 >> deleted file mode 100755 >> index eedcf11a2308..000000000000 >> --- a/tests/btrfs/312 >> +++ /dev/null >> @@ -1,78 +0,0 @@ >> -#! /bin/bash >> -# SPDX-License-Identifier: GPL-2.0 >> -# Copyright (c) 2024 Oracle. All Rights Reserved. >> -# >> -# FS QA Test 312 >> -# >> -# On a clone a device check to see if tempfsid is activated. >> -# >> -. ./common/preamble >> -_begin_fstest auto quick clone tempfsid >> - >> -_cleanup() >> -{ >> - cd / >> - $UMOUNT_PROG $mnt1 > /dev/null 2>&1 >> - rm -r -f $tmp.* >> - rm -r -f $mnt1 >> -} >> - >> -. ./common/filter.btrfs >> -. ./common/reflink >> - >> -_supported_fs btrfs >> -_require_scratch_dev_pool 2 >> -_scratch_dev_pool_get 2 >> -_require_btrfs_fs_feature temp_fsid >> - >> -mnt1=$TEST_DIR/$seq/mnt1 >> -mkdir -p $mnt1 >> - >> -create_cloned_devices() >> -{ >> - local dev1=$1 >> - local dev2=$2 >> - >> - echo -n Creating cloned device... >> - _mkfs_dev -fq -b $((1024 * 1024 * 300)) $dev1 >> - >> - _mount $dev1 $SCRATCH_MNT >> - >> - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ >> - _filter_xfs_io >> - $UMOUNT_PROG $SCRATCH_MNT >> - # device dump of $dev1 to $dev2 >> - dd if=$dev1 of=$dev2 bs=300M count=1 conv=fsync status=none || \ >> - _fail "dd failed: $?" >> - echo done >> -} >> - >> -mount_cloned_device() >> -{ >> - echo ---- $FUNCNAME ---- >> - create_cloned_devices ${SCRATCH_DEV_NAME[0]} ${SCRATCH_DEV_NAME[1]} >> - >> - echo Mounting original device >> - _mount ${SCRATCH_DEV_NAME[0]} $SCRATCH_MNT >> - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ >> - _filter_xfs_io >> - check_fsid ${SCRATCH_DEV_NAME[0]} >> - >> - echo Mounting cloned device >> - _mount ${SCRATCH_DEV_NAME[1]} $mnt1 || \ >> - _fail "mount failed, tempfsid didn't work" >> - >> - echo cp reflink must fail >> - _cp_reflink $SCRATCH_MNT/foo $mnt1/bar 2>&1 | \ >> - _filter_testdir_and_scratch >> - >> - check_fsid ${SCRATCH_DEV_NAME[1]} >> -} >> - >> -mount_cloned_device >> - >> -_scratch_dev_pool_put >> - >> -# success, all done >> -status=0 >> -exit >> diff --git a/tests/btrfs/312.out b/tests/btrfs/312.out >> deleted file mode 100644 >> index b7de6ce3cc6e..000000000000 >> --- a/tests/btrfs/312.out >> +++ /dev/null >> @@ -1,19 +0,0 @@ >> -QA output created by 312 >> ----- mount_cloned_device ---- >> -Creating cloned device...wrote 9000/9000 bytes at offset 0 >> -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) >> -done >> -Mounting original device >> -wrote 9000/9000 bytes at offset 0 >> -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) >> -On disk fsid: FSID >> -Metadata uuid: FSID >> -Temp fsid: FSID >> -Tempfsid status: 0 >> -Mounting cloned device >> -cp reflink must fail >> -cp: failed to clone 'TEST_DIR/312/mnt1/bar' from 'SCRATCH_MNT/foo': Invalid cross-device link >> -On disk fsid: FSID >> -Metadata uuid: FSID >> -Temp fsid: TEMPFSID >> -Tempfsid status: 1 >> diff --git a/tests/generic/740 b/tests/generic/740 >> new file mode 100755 >> index 000000000000..2b2bff96b8ec >> --- /dev/null >> +++ b/tests/generic/740 >> @@ -0,0 +1,88 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2024 Oracle. All Rights Reserved. >> +# >> +# FS QA Test 740 >> +# >> +# Set up a filesystem, create a clone, mount both, and verify if the cp reflink >> +# operation between these two mounts fails. >> +# >> +. ./common/preamble >> +_begin_fstest auto quick clone volume tempfsid >> + >> +_cleanup() >> +{ >> + cd / >> + rm -r -f $tmp.* >> + >> + $UMOUNT_PROG $mnt2 &> /dev/null >> + rm -r -f $mnt2 >> + _destroy_loop_device $loop_dev2 &> /dev/null >> + rm -r -f $loop_file2 >> + >> + $UMOUNT_PROG $mnt1 &> /dev/null >> + rm -r -f $mnt1 >> + _destroy_loop_device $loop_dev1 &> /dev/null >> + rm -r -f $loop_file1 >> + >> +} >> + >> +. ./common/filter >> +. ./common/reflink >> + >> +# Modify as appropriate. >> +_supported_fs btrfs ext4 > > If it only supports btrfs and ext4, then it's a "shared" case. Generally > we use "_require_xxxx" to _notrun on fs which isn't supported, except > a fs totally not be supported, we use "^$that_fs_name". Moving the test case to tests/shared. Rest, I'm not entirely sure if I understood what you said. However, upon looking at shared/002 test, it appears to use _supported_fs xx to filter out unsupported file system types. > > As this test need loop device, so you might need the FSTYP is a local > filesystem, so: > _require_block_device $TEST_DEV > I got it. > And... > >> +_require_cp_reflink >> +_require_test >> +_require_loop >> + >> +[[ $FSTYP == "btrfs" ]] && _require_btrfs_fs_feature temp_fsid > > I'm wondering if we can have a common function likes _require_duplicated_fsid ? > Then this function helps to avoid running this test on those fs which doesn't > support (e.g. xfs can't mount duplicate UUID now?) > > e.g. > > _require_duplicate_fsid() > { > case $FSTYP: > btrfs) > _require_btrfs_fs_feature temp_fsid > ;; > ext4) > # not sure, does it always supports that? > ;; > *) > _notrun "$FSTYP can't be mounted with duplicate fsid" > # not sure if need a real testing at here, likes mkfs > # on an image file, copy it, then try to mount them? As of now, for other file systems, I think we can maintain static checking. > ;; > esac > } > > Any thoughts about this? It makes sense to me. I will use this. Thanks ,Anand > > Thanks, > Zorro > >> + >> +clone_filesystem() >> +{ >> + local dev1=$1 >> + local dev2=$2 >> + >> + _mkfs_dev $dev1 >> + >> + _mount $dev1 $mnt1 >> + $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo >> $seqres.full >> + $UMOUNT_PROG $mnt1 >> + >> + # device dump of $dev1 to $dev2 >> + dd if=$dev1 of=$dev2 conv=fsync status=none || _fail "dd failed: $?" >> +} >> + >> +mnt1=$TEST_DIR/$seq/mnt1 >> +rm -r -f $mnt1 >> +mkdir -p $mnt1 >> + >> +mnt2=$TEST_DIR/$seq/mnt2 >> +rm -r -f $mnt2 >> +mkdir -p $mnt2 >> + >> +loop_file1="$TEST_DIR/$seq/image1" >> +rm -r -f $loop_file1 >> +truncate -s 300m "$loop_file1" >> +loop_dev1=$(_create_loop_device "$loop_file1") >> + >> +loop_file2="$TEST_DIR/$seq/image2" >> +rm -r -f $loop_file2 >> +truncate -s 300m "$loop_file2" >> +loop_dev2=$(_create_loop_device "$loop_file2") >> + >> +clone_filesystem ${loop_dev1} ${loop_dev2} >> + >> +# Mounting original device >> +_mount $loop_dev1 $mnt1 >> +$XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo | _filter_xfs_io >> + >> +# Mounting cloned device >> +_mount $loop_dev2 $mnt2 || _fail "mount of cloned device failed" >> + >> +# cp reflink across two different filesystems must fail >> +_cp_reflink $mnt1/foo $mnt2/bar 2>&1 | _filter_test_dir >> + >> +# success, all done >> +status=0 >> +exit >> diff --git a/tests/generic/740.out b/tests/generic/740.out >> new file mode 100644 >> index 000000000000..6ca8bb7e1b21 >> --- /dev/null >> +++ b/tests/generic/740.out >> @@ -0,0 +1,4 @@ >> +QA output created by 740 >> +wrote 9000/9000 bytes at offset 0 >> +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) >> +cp: failed to clone 'TEST_DIR/740/mnt2/bar' from 'TEST_DIR/740/mnt1/foo': Invalid cross-device link >> -- >> 2.39.3 >> >> >
diff --git a/tests/btrfs/312 b/tests/btrfs/312 deleted file mode 100755 index eedcf11a2308..000000000000 --- a/tests/btrfs/312 +++ /dev/null @@ -1,78 +0,0 @@ -#! /bin/bash -# SPDX-License-Identifier: GPL-2.0 -# Copyright (c) 2024 Oracle. All Rights Reserved. -# -# FS QA Test 312 -# -# On a clone a device check to see if tempfsid is activated. -# -. ./common/preamble -_begin_fstest auto quick clone tempfsid - -_cleanup() -{ - cd / - $UMOUNT_PROG $mnt1 > /dev/null 2>&1 - rm -r -f $tmp.* - rm -r -f $mnt1 -} - -. ./common/filter.btrfs -. ./common/reflink - -_supported_fs btrfs -_require_scratch_dev_pool 2 -_scratch_dev_pool_get 2 -_require_btrfs_fs_feature temp_fsid - -mnt1=$TEST_DIR/$seq/mnt1 -mkdir -p $mnt1 - -create_cloned_devices() -{ - local dev1=$1 - local dev2=$2 - - echo -n Creating cloned device... - _mkfs_dev -fq -b $((1024 * 1024 * 300)) $dev1 - - _mount $dev1 $SCRATCH_MNT - - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ - _filter_xfs_io - $UMOUNT_PROG $SCRATCH_MNT - # device dump of $dev1 to $dev2 - dd if=$dev1 of=$dev2 bs=300M count=1 conv=fsync status=none || \ - _fail "dd failed: $?" - echo done -} - -mount_cloned_device() -{ - echo ---- $FUNCNAME ---- - create_cloned_devices ${SCRATCH_DEV_NAME[0]} ${SCRATCH_DEV_NAME[1]} - - echo Mounting original device - _mount ${SCRATCH_DEV_NAME[0]} $SCRATCH_MNT - $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/foo | \ - _filter_xfs_io - check_fsid ${SCRATCH_DEV_NAME[0]} - - echo Mounting cloned device - _mount ${SCRATCH_DEV_NAME[1]} $mnt1 || \ - _fail "mount failed, tempfsid didn't work" - - echo cp reflink must fail - _cp_reflink $SCRATCH_MNT/foo $mnt1/bar 2>&1 | \ - _filter_testdir_and_scratch - - check_fsid ${SCRATCH_DEV_NAME[1]} -} - -mount_cloned_device - -_scratch_dev_pool_put - -# success, all done -status=0 -exit diff --git a/tests/btrfs/312.out b/tests/btrfs/312.out deleted file mode 100644 index b7de6ce3cc6e..000000000000 --- a/tests/btrfs/312.out +++ /dev/null @@ -1,19 +0,0 @@ -QA output created by 312 ----- mount_cloned_device ---- -Creating cloned device...wrote 9000/9000 bytes at offset 0 -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -done -Mounting original device -wrote 9000/9000 bytes at offset 0 -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -On disk fsid: FSID -Metadata uuid: FSID -Temp fsid: FSID -Tempfsid status: 0 -Mounting cloned device -cp reflink must fail -cp: failed to clone 'TEST_DIR/312/mnt1/bar' from 'SCRATCH_MNT/foo': Invalid cross-device link -On disk fsid: FSID -Metadata uuid: FSID -Temp fsid: TEMPFSID -Tempfsid status: 1 diff --git a/tests/generic/740 b/tests/generic/740 new file mode 100755 index 000000000000..2b2bff96b8ec --- /dev/null +++ b/tests/generic/740 @@ -0,0 +1,88 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oracle. All Rights Reserved. +# +# FS QA Test 740 +# +# Set up a filesystem, create a clone, mount both, and verify if the cp reflink +# operation between these two mounts fails. +# +. ./common/preamble +_begin_fstest auto quick clone volume tempfsid + +_cleanup() +{ + cd / + rm -r -f $tmp.* + + $UMOUNT_PROG $mnt2 &> /dev/null + rm -r -f $mnt2 + _destroy_loop_device $loop_dev2 &> /dev/null + rm -r -f $loop_file2 + + $UMOUNT_PROG $mnt1 &> /dev/null + rm -r -f $mnt1 + _destroy_loop_device $loop_dev1 &> /dev/null + rm -r -f $loop_file1 + +} + +. ./common/filter +. ./common/reflink + +# Modify as appropriate. +_supported_fs btrfs ext4 +_require_cp_reflink +_require_test +_require_loop + +[[ $FSTYP == "btrfs" ]] && _require_btrfs_fs_feature temp_fsid + +clone_filesystem() +{ + local dev1=$1 + local dev2=$2 + + _mkfs_dev $dev1 + + _mount $dev1 $mnt1 + $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo >> $seqres.full + $UMOUNT_PROG $mnt1 + + # device dump of $dev1 to $dev2 + dd if=$dev1 of=$dev2 conv=fsync status=none || _fail "dd failed: $?" +} + +mnt1=$TEST_DIR/$seq/mnt1 +rm -r -f $mnt1 +mkdir -p $mnt1 + +mnt2=$TEST_DIR/$seq/mnt2 +rm -r -f $mnt2 +mkdir -p $mnt2 + +loop_file1="$TEST_DIR/$seq/image1" +rm -r -f $loop_file1 +truncate -s 300m "$loop_file1" +loop_dev1=$(_create_loop_device "$loop_file1") + +loop_file2="$TEST_DIR/$seq/image2" +rm -r -f $loop_file2 +truncate -s 300m "$loop_file2" +loop_dev2=$(_create_loop_device "$loop_file2") + +clone_filesystem ${loop_dev1} ${loop_dev2} + +# Mounting original device +_mount $loop_dev1 $mnt1 +$XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo | _filter_xfs_io + +# Mounting cloned device +_mount $loop_dev2 $mnt2 || _fail "mount of cloned device failed" + +# cp reflink across two different filesystems must fail +_cp_reflink $mnt1/foo $mnt2/bar 2>&1 | _filter_test_dir + +# success, all done +status=0 +exit diff --git a/tests/generic/740.out b/tests/generic/740.out new file mode 100644 index 000000000000..6ca8bb7e1b21 --- /dev/null +++ b/tests/generic/740.out @@ -0,0 +1,4 @@ +QA output created by 740 +wrote 9000/9000 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +cp: failed to clone 'TEST_DIR/740/mnt2/bar' from 'TEST_DIR/740/mnt1/foo': Invalid cross-device link
Given that ext4 also allows mounting of a cloned filesystem, the btrfs test case btrfs/312, which assesses the functionality of cloned filesystem support, can be refactored to be under the generic group. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- tests/btrfs/312 | 78 -------------------------------------- tests/btrfs/312.out | 19 ---------- tests/generic/740 | 88 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/740.out | 4 ++ 4 files changed, 92 insertions(+), 97 deletions(-) delete mode 100755 tests/btrfs/312 delete mode 100644 tests/btrfs/312.out create mode 100755 tests/generic/740 create mode 100644 tests/generic/740.out