| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved. |
| # |
| # FSQA Test No. 208 |
| # |
| # Test subvolume deletion using the subvolume id, even when the subvolume in |
| # question is in a different mount space. |
| # |
| seq=`basename $0` |
| seqres=$RESULT_DIR/$seq |
| echo "QA output created by $seq" |
| tmp=/tmp/$$ |
| status=1 # failure is the default! |
| |
| # get standard environment, filters and checks |
| . ./common/rc |
| . ./common/filter |
| . ./common/filter.btrfs |
| |
| # real QA test starts here |
| _supported_fs btrfs |
| _require_scratch |
| _require_btrfs_command subvolume delete --subvolid |
| |
| _scratch_mkfs > /dev/null 2>&1 |
| _scratch_mount |
| |
| _delete_and_list() |
| { |
| local subvol_name="$1" |
| local msg="$2" |
| |
| SUBVOLID=$(_btrfs_get_subvolid $SCRATCH_MNT "$subvol_name") |
| $BTRFS_UTIL_PROG subvolume delete --subvolid $SUBVOLID $SCRATCH_MNT | _filter_scratch |
| |
| echo "$msg" |
| $BTRFS_UTIL_PROG subvolume list $SCRATCH_MNT | $AWK_PROG '{ print $NF }' |
| } |
| |
| # Test creating a normal subvolumes |
| $BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol1 | _filter_scratch |
| $BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol2 | _filter_scratch |
| $BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol3 | _filter_scratch |
| |
| echo "Current subvolume ids:" |
| $BTRFS_UTIL_PROG subvolume list $SCRATCH_MNT | $AWK_PROG '{ print $NF }' |
| |
| # Delete the subvolume subvol1, and list the remaining two subvolumes |
| _delete_and_list subvol1 "After deleting one subvolume:" |
| _scratch_unmount |
| |
| # Now we mount the subvol2, which makes subvol3 not accessible for this mount |
| # point, but we should be able to delete it using it's subvolume id |
| $MOUNT_PROG -o subvol=subvol2 $SCRATCH_DEV $SCRATCH_MNT |
| _delete_and_list subvol3 "Last remaining subvolume:" |
| _scratch_unmount |
| |
| # now mount the rootfs |
| _scratch_mount |
| # Delete the subvol2 |
| _delete_and_list subvol2 "All subvolumes removed." |
| _scratch_unmount |
| |
| # success, all done |
| status=0 |
| exit |