overlay: Enable character device to be the base fs partition
authorZhihao Cheng <chengzhihao1@huawei.com>
Wed, 25 Sep 2019 06:35:33 +0000 (14:35 +0800)
committerEryu Guan <guaneryu@gmail.com>
Wed, 25 Sep 2019 09:29:39 +0000 (17:29 +0800)
When running overlay tests using character devices as base fs partitions,
all overlay usecase results become 'notrun'. Function
'_overay_config_override' (common/config) detects that the current base
fs partition is not a block device and will set FSTYP to base fs. The
overlay usecase will check the current FSTYP, and if it is not 'overlay'
or 'generic', it will skip the execution.

For example, using UBIFS as base fs skips all overlay usecases:

  FSTYP         -- ubifs       # FSTYP should be overridden as 'overlay'
  MKFS_OPTIONS  -- /dev/ubi0_1 # Character device
  MOUNT_OPTIONS -- -t ubifs /dev/ubi0_1 /tmp/scratch

  overlay/001 [not run] not suitable for this filesystem type: ubifs
  overlay/002 [not run] not suitable for this filesystem type: ubifs
  overlay/003 [not run] not suitable for this filesystem type: ubifs

When checking that the base fs partition is a block/character device,
FSTYP is overwritten as 'overlay'. This patch allows the base fs
partition to be a character device that can also execute overlay
usecases (such as ubifs).

Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>

index 4c86a4925e86615afe2f36d4e234f5168c00c8f8..4eda36c7aaeb16b16d1473a7ad752d36ecafba81 100644 (file)
@@ -532,7 +532,7 @@ _canonicalize_mountpoint()
 # When SCRATCH/TEST_* vars are defined in evironment and not
 # in config file, this function is called after vars have already
 # been overriden in the previous test.
-# In that case, TEST_DEV is a directory and not a blockdev and
+# In that case, TEST_DEV is a directory and not a blockdev/chardev and
 # the function will return without overriding the SCRATCH/TEST_* vars.
@@ -550,7 +550,7 @@ _overlay_config_override()
        #    the new OVL_BASE_SCRATCH/TEST_DEV/MNT vars are set to the values
        #    of the configured base fs and SCRATCH/TEST_DEV vars are set to the
        #    overlayfs base and mount dirs inside base fs mount.
-       [ -b "$TEST_DEV" ] || return 0
+       [ -b "$TEST_DEV" ] || [ -c "$TEST_DEV" ] || return 0
        # Config file may specify base fs type, but we obay -overlay flag
        [ "$FSTYP" == overlay ] || export OVL_BASE_FSTYP="$FSTYP"
@@ -570,7 +570,7 @@ _overlay_config_override()
-       [ -b "$SCRATCH_DEV" ] || return 0
+       [ -b "$SCRATCH_DEV" ] || [ -c "$SCRATCH_DEV" ] || return 0
        # Store original base fs vars
index 66c7fd4d7a6c4c09b6a7ab5a4f6f067d0ccf8cf7..8d57c371aef2f9d5f83b268c85c34b9c10c7acab 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -3100,7 +3100,7 @@ _require_scratch_shutdown()
                        # SCRATCH_DEV, in this case OVL_BASE_SCRATCH_DEV
                        # will be null, so check OVL_BASE_SCRATCH_DEV before
                        # running shutdown to avoid shutting down base fs accidently.
-                       _notrun "$SCRATCH_DEV is not a block device"
+                       _notrun "This test requires a valid $OVL_BASE_SCRATCH_DEV as ovl base fs"
                        src/godown -f $OVL_BASE_SCRATCH_MNT 2>&1 \
                        || _notrun "Underlying filesystem does not support shutdown"