cephfs: add ceph-fuse suport for ceph-fuse
authorRishabh Dave <ridave@redhat.com>
Tue, 19 Apr 2022 17:58:11 +0000 (23:28 +0530)
committerZorro Lang <zlang@kernel.org>
Tue, 26 Apr 2022 18:54:00 +0000 (02:54 +0800)
Currently tests in xfstests-dev can be executed against CephFS only by
mounting CephFS using kernel driver. Attempting to run tests against
CephFS using FUSE doesn't work because xfstests-dev would remount CephFS
using kernel. This patch adds the ability for xfstest-dev code to mount
CephFS using FUSE.

[Zorro add missed ";;" in common/rc]

Fixes: https://tracker.ceph.com/issues/55354
Signed-off-by: Rishabh Dave <ridave@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
common/config
common/rc

index 1033b8903ea12272e8c7477dd8ca2c54aa325a9a..efcf12e953b6c0c571dc39a85960e555f4b0386b 100644 (file)
@@ -556,6 +556,8 @@ _check_device()
                        _fatal "common/config: $name ($dev) is not a character device"
                fi
                ;;
+       ceph-fuse)
+               ;;
        *)
                _fatal "common/config: $name ($dev) is not a block device or a network filesystem"
        esac
index 553ae350f7937391fff48145fe72a6db61fe5d9d..a8252c7f6eedb070ef12afa52f7555eca178fd4a 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -500,10 +500,14 @@ _test_mount()
 {
     local mount_ret
 
-    if [ "$FSTYP" == "overlay" ]; then
+    if [ "$FSTYP" == "ceph-fuse" ]; then
+        $CEPH_FUSE_BIN_PATH $TEST_FS_MOUNT_OPTS $TEST_DIR 2> /dev/null
+        return $?
+    elif [ "$FSTYP" == "overlay" ]; then
         _overlay_test_mount $*
         return $?
     fi
+
     _test_options mount
     _mount -t $FSTYP $TEST_OPTIONS $TEST_FS_MOUNT_OPTS $SELINUX_MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR
     mount_ret=$?
@@ -1446,7 +1450,8 @@ _fs_type()
     # have to bother with this quirk.
     #
     _df_device $1 | $AWK_PROG '{ print $2 }' | \
-        sed -e 's/nfs4/nfs/' -e 's/fuse.glusterfs/glusterfs/'
+        sed -e 's/nfs4/nfs/' -e 's/fuse.glusterfs/glusterfs/' \
+            -e 's/fuse.ceph-fuse/ceph-fuse/'
 }
 
 # return the FS mount options of a mounted device
@@ -1595,6 +1600,24 @@ _supported_fs()
     _notrun "not suitable for this filesystem type: $FSTYP"
 }
 
+_check_if_dev_already_mounted()
+{
+       local dev=$1
+       local mnt=$2
+
+       # find $dev as the source, and print result in "$dev $mnt" format
+       local mount_rec=`findmnt -rncv -S $dev -o SOURCE,TARGET`
+       [ -n "$mount_rec" ] || return 1 # 1 = not mounted
+
+       # if it's mounted, make sure its on $mnt
+       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
+}
+
 # check if a FS on a device is mounted
 # if so, verify that it is mounted on mount point
 # if fstype is given as argument, verify that it is also
@@ -1608,16 +1631,14 @@ _check_mounted_on()
        local mnt=$4
        local type=$5
 
-       # find $dev as the source, and print result in "$dev $mnt" format
-       local mount_rec=`findmnt -rncv -S $dev -o SOURCE,TARGET`
-       [ -n "$mount_rec" ] || return 1 # 1 = not mounted
+       # this check doesn't work on ceph-fuse
+       if [ "$dev" != "ceph-fuse" ]; then
+               _check_if_dev_already_mounted $dev $mnt
+               dev_already_mounted=$?
 
-       # if it's mounted, make sure its on $mnt
-       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
+               if [ $dev_already_mounted -ne 0 ]; then
+                       return $dev_already_mounted
+               fi
        fi
 
        if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]; then
@@ -1870,6 +1891,8 @@ _require_test()
                        _notrun "this test requires a valid \$TEST_DIR"
                fi
                ;;
+       ceph-fuse)
+               ;;
        cifs)
                echo $TEST_DEV | grep -q "//" > /dev/null 2>&1
                if [ -z "$TEST_DEV" -o "$?" != "0" ]; then
@@ -3204,7 +3227,7 @@ _check_test_fs()
     virtiofs)
        # no way to check consistency for virtiofs
        ;;
-    ceph)
+    ceph|ceph-fuse)
        # no way to check consistency for CephFS
        ;;
     glusterfs)