[PATCH] xfstests: fix SCRATCH_DEV_POOL mount/umount issues

Anand Jain Anand.Jain at oracle.com
Thu Jun 27 02:30:57 CDT 2013



On 06/27/2013 09:57 AM, Josef Bacik wrote:
> If you use the SCRATCH_DEV_POOL for btrfs you will end up with the command line
> like this
>
> mkfs.btrfs $SCRATCH_DEV_POOL $SCRATCH_DEV

> and btrfs does this thing where it makes the lowest valued device id show up in
> /proc/mounts no matter which device you specify at the mount command.  So in
> this case mount will show the first device in $SCRATCH_DEV_POOL instead of
> $SCRATCH_DEV,

  The first item in the SCRATCH_DEV_POOL is assigned to SCRATCH_DEV.
  The remaining will be used where more than one disk is needed.

> so anybody who wants to just use the scratch mnt with the scratch
> dev will fail to work because we never unmount the scratch mount.


>  Fix this by
> checking to see if the scratch dev pool is mounted at scratch mnt and unmount it
> so we can run our test.  Also fix scratch_unmount to call umount $SCRATCH_MNT
> instead of unmount $SCRATCH_DEV so it doesn't screw up with tests that use
> $SCRATCH_DEV_POOL.  This fixes the issue I was seeing by running
>
> ./check btrfs/307 generic/015
>
> Thanks,
>
> Signed-off-by: Josef Bacik <jbacik at fusionio.com>
> ---
>   common/rc |   19 ++++++++++++++++++-
>   1 files changed, 18 insertions(+), 1 deletions(-)
>
> diff --git a/common/rc b/common/rc
> index ad7cbc9..6e3ad65 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -280,7 +280,7 @@ _scratch_mount()
>
>   _scratch_unmount()
>   {
> -    $UMOUNT_PROG $SCRATCH_DEV
> +    $UMOUNT_PROG $SCRATCH_MNT
>   }

  This will fix the above problem for the reason mentioned.

>   _scratch_remount()
> @@ -938,6 +938,8 @@ _supported_os()
>   #
>   _require_scratch()
>   {
> +    local i
> +
>       case "$FSTYP" in
>   	nfs*)
>   		 echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1
> @@ -978,6 +980,21 @@ _require_scratch()
>               exit 1
>           fi
>       fi
> +
> +    # we may have a scratch dev pool specified, so make sure it's been unmounted
> +    # from the scratch mount
> +    for i in $SCRATCH_DEV_POOL; do
> +        if _mount | grep -q $i; then
> +            if ! _mount | grep $i | grep -q $SCRATCH_MNT; then
> +                echo "\$SCRATCH_DEV_POOL is mounted but not on \$SCRATCH_MNT - aborting"
> +                exit 1
> +            fi
> +            if ! $UMOUNT_PROG $i; then
> +                echo "failed to umount $i - aborting"
> +                exit 1
> +            fi
> +        fi
> +    done
>   }

   This looks some additional checks beyond the fix for above problem.
   Or did I miss something ? Further _is_mounted() can be used here.



Thanks
Anand



More information about the xfs mailing list