On Thu, Feb 15, 2024 at 6:35 AM Anand Jain <anand.jain@xxxxxxxxxx> wrote: > > Given concurrent mounting of both the original and its clone device on > the same system, this test confirms the integrity of send and receive > operations in the presence of active tempfsid. > > Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx> > --- > tests/btrfs/314 | 85 +++++++++++++++++++++++++++++++++++++++++++++ > tests/btrfs/314.out | 30 ++++++++++++++++ > 2 files changed, 115 insertions(+) > create mode 100755 tests/btrfs/314 > create mode 100644 tests/btrfs/314.out > > diff --git a/tests/btrfs/314 b/tests/btrfs/314 > new file mode 100755 > index 000000000000..1ceb448d2a5e > --- /dev/null > +++ b/tests/btrfs/314 > @@ -0,0 +1,85 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Oracle. All Rights Reserved. > +# > +# FS QA Test 314 > +# > +# Send and receive functionality test between a normal and > +# tempfsid filesystem. > +# > +. ./common/preamble > +_begin_fstest auto quick snapshot tempfsid Missing 'send' group. > + > +_cleanup() > +{ > + cd / > + umount $tempfsid_mnt 2>/dev/null $UMOUNT_PROG > + rm -r -f $tmp.* > + rm -r -f $sendfile > + rm -r -f $tempfsid_mnt > +} > + > +. ./common/filter.btrfs > + > +_supported_fs btrfs > +_require_btrfs_sysfs_fsid > +_require_scratch_dev_pool 2 > +_require_btrfs_fs_feature temp_fsid > +_require_btrfs_command inspect-internal dump-super > +_require_btrfs_mkfs_uuid_option > + > +_scratch_dev_pool_get 2 > + > +# mount point for the tempfsid device > +tempfsid_mnt=$TEST_DIR/$seq/tempfsid_mnt > +sendfile=$TEST_DIR/$seq/replicate.send > + > +send_receive_tempfsid() > +{ > + local src=$1 > + local dst=$2 > + > + echo ---- $FUNCNAME ---- What value do we get from echoing the function's name? It's the only test function, plus the callers of the function already echo something more useful. Can be removed. > + > + # Use first 2 devices from the SCRATCH_DEV_POOL > + mkfs_clone ${SCRATCH_DEV} ${SCRATCH_DEV_NAME[1]} > + _scratch_mount > + _mount ${SCRATCH_DEV_NAME[1]} ${tempfsid_mnt} > + > + > + $XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' ${src}/foo | _filter_xfs_io > + $BTRFS_UTIL_PROG subvolume snapshot -r ${src} ${src}/snap1 | \ > + _filter_testdir_and_scratch > + > + echo Send ${src} | _filter_testdir_and_scratch > + $BTRFS_UTIL_PROG send -f ${sendfile} ${src}/snap1 2>&1 | \ > + _filter_testdir_and_scratch > + echo Receive ${dst} | _filter_testdir_and_scratch > + $BTRFS_UTIL_PROG receive -f ${sendfile} ${dst} | \ > + _filter_testdir_and_scratch > + echo -e -n "Send:\n" What's -e and -n for? This could be just: echo Send: > + sha256sum ${src}/foo | _filter_testdir_and_scratch Previous tests use md5... here sha256. What's the reason? This is highly inconsistent... Also we have _md5_checksum(), which prints just the checksum and filters out the file path. Or just call _hexdump and match with the golden output. > + echo -e -n "Receive:\n" Same here. This can be just: echo Receive: > + sha256sum ${dst}/snap1/foo | _filter_testdir_and_scratch > +} > + > +mkdir -p $tempfsid_mnt > + > +echo Test Send and Receive Useless message too, we know this is a send/receive test, doesn't test other features. Thanks. > +echo -e \\nFrom non-tempfsid ${SCRATCH_MNT} to tempfsid ${tempfsid_mnt} | \ > + _filter_testdir_and_scratch > +send_receive_tempfsid $SCRATCH_MNT $tempfsid_mnt > + > +_scratch_unmount > +_cleanup > +mkdir -p $tempfsid_mnt > + > +echo -e \\nFrom tempfsid ${tempfsid_mnt} to non-tempfsid ${SCRATCH_MNT} | \ > + _filter_testdir_and_scratch > +send_receive_tempfsid $tempfsid_mnt $SCRATCH_MNT > + > +_scratch_dev_pool_put > + > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/314.out b/tests/btrfs/314.out > new file mode 100644 > index 000000000000..eb0010da264e > --- /dev/null > +++ b/tests/btrfs/314.out > @@ -0,0 +1,30 @@ > +QA output created by 314 > +Test Send and Receive > + > +From non-tempfsid SCRATCH_MNT to tempfsid TEST_DIR/314/tempfsid_mnt > +---- send_receive_tempfsid ---- > +wrote 9000/9000 bytes at offset 0 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Create a readonly snapshot of 'SCRATCH_MNT' in 'SCRATCH_MNT/snap1' > +Send SCRATCH_MNT > +At subvol SCRATCH_MNT/snap1 > +Receive TEST_DIR/314/tempfsid_mnt > +At subvol snap1 > +Send: > +0598aa54768194ade580b9806ac98ace43a0310aeceae95762f62491625eee52 SCRATCH_MNT/foo > +Receive: > +0598aa54768194ade580b9806ac98ace43a0310aeceae95762f62491625eee52 TEST_DIR/314/tempfsid_mnt/snap1/foo > + > +From tempfsid TEST_DIR/314/tempfsid_mnt to non-tempfsid SCRATCH_MNT > +---- send_receive_tempfsid ---- > +wrote 9000/9000 bytes at offset 0 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Create a readonly snapshot of 'TEST_DIR/314/tempfsid_mnt' in 'TEST_DIR/314/tempfsid_mnt/snap1' > +Send TEST_DIR/314/tempfsid_mnt > +At subvol TEST_DIR/314/tempfsid_mnt/snap1 > +Receive SCRATCH_MNT > +At subvol snap1 > +Send: > +0598aa54768194ade580b9806ac98ace43a0310aeceae95762f62491625eee52 TEST_DIR/314/tempfsid_mnt/foo > +Receive: > +0598aa54768194ade580b9806ac98ace43a0310aeceae95762f62491625eee52 SCRATCH_MNT/snap1/foo > -- > 2.39.3 > >