]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
common/rc: use findmnt to check mounted device
authorEryu Guan <eguan@redhat.com>
Fri, 10 Mar 2017 04:26:34 +0000 (12:26 +0800)
committerEryu Guan <eguan@redhat.com>
Fri, 10 Mar 2017 08:53:41 +0000 (16:53 +0800)
Doing 'grep -F "$dev on "' to find the mounted device is not
always accurate, e.g.

 SCRATCH_DEV=/vda6 is mounted but not on SCRATCH_MNT=/vda6/ovl-mnt - aborting
 Already mounted result:
 /dev/vda6 on /vda6 type xfs (rw,relatime,context=system_u:object_r:nfs_t:s0,attr2,inode64,noquota)

Fix it by using findmnt command and specifying the $dev as mount
source, print the result in "$dev $mnt" format. This works for local
filesystems, network filesystems and overlayfs, avoids all kinds of
tricky and error-prone grep pattern/regex.

Also fixed the if-then-fi format in _check_mounted_on() while we're
at it.

Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
common/rc

index 756c414684292272c754cf346c941d5d76dbb3cb..d53f67967829631d7b758bbc173b2a87d4cce29d 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -1462,24 +1462,19 @@ _check_mounted_on()
        local mnt=$4
        local type=$5
 
-       # Note that we use -F here so grep doesn't try to interpret an NFS over
-       # IPv6 server as a regular expression.  Because of that, we cannot use
-       # ^$dev so we use "$dev on " to avoid matching $dev to mount point field
-       # for overlay case, where $dev is a directory.
-       local mount_rec=`_mount | grep -F "$dev on "`
+       # find $dev as the source, and print result in "$dev $mnt" format
+       local mount_rec=`findmnt -rnc -S $dev -o SOURCE,TARGET`
        [ -n "$mount_rec" ] || return 1 # 1 = not mounted
 
        # if it's mounted, make sure its on $mnt
-       if ! (echo $mount_rec | grep -q "$dev on $mnt")
-       then
+       if [ "$mount_rec" != "$dev $mnt" ]; then
                echo "$devname=$dev is mounted but not on $mntname=$mnt - aborting"
                echo "Already mounted result:"
                echo $mount_rec
                return 2 # 2 = mounted on wrong mnt
        fi
 
-       if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]
-       then
+       if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]; then
                echo "$devname=$dev is mounted but not a type $type filesystem"
                # raw $DF_PROG cannot handle NFS/CIFS/overlay correctly
                _df_device $dev