generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
authorXiao Yang <yangx.jy@cn.fujitsu.com>
Thu, 6 Aug 2020 02:13:37 +0000 (10:13 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 9 Aug 2020 17:03:58 +0000 (01:03 +0800)
Current _scratch_mkfs_geom() adds geometry parameters to the end of the
MKFS_OPTIONS blindly.  ext4 can accept the last one if geometry parameters
and original MKFS_OPTION have the same mkfs options but xfs cannot accept
them and reports "xxx option is respecified" error.  Make _scratch_mkfs_geom()
override the same mkfs options in original MKFS_OPTION by geometry parameters.

With this change, generic/223 doesn't need to clear original MKFS_OPTION
before calling _scratch_mkfs_geom() and can use other mkfs options in original
MKFS_OPTION.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
common/rc
tests/generic/223

index 359d03ade8fb845f7d35386f81150182080857ce..ad4d080d92a47c496846b7ccbf1d9a0c7e20fb09 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -1051,7 +1051,19 @@ _scratch_mkfs_geom()
 
     case $FSTYP in
     xfs)
-       MKFS_OPTIONS+=" -b size=$blocksize, -d su=$sunit_bytes,sw=$swidth_mult"
+       if echo "$MKFS_OPTIONS" | egrep -q "b?size="; then
+               MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+/\1$blocksize/")
+       else
+               MKFS_OPTIONS+=" -b size=$blocksize"
+       fi
+
+       if echo "$MKFS_OPTIONS" | egrep -q "(su|sunit|sw|swidth)="; then
+               MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r \
+                       -e "s/(su|sunit)=[0-9kmg]+/su=$sunit_bytes/" \
+                       -e "s/(sw|swidth)=[0-9kmg]+/sw=$swidth_mult/")
+       else
+               MKFS_OPTIONS+=" -d su=$sunit_bytes,sw=$swidth_mult"
+       fi
        ;;
     ext4|ext4dev)
        MKFS_OPTIONS+=" -b $blocksize -E stride=$sunit_blocks,stripe_width=$swidth_blocks"
index 6cfd00ddec4410e90162463edeff9835f0d5ec52..ba7c9a448c97fbe881b0e8079e626086ac7ed613 100755 (executable)
@@ -41,7 +41,6 @@ for SUNIT_K in 8 16 32 64 128; do
        let SUNIT_BLOCKS=$SUNIT_BYTES/$BLOCKSIZE
 
        echo "=== mkfs with su $SUNIT_BLOCKS blocks x 4 ==="
-       export MKFS_OPTIONS=""
        _scratch_mkfs_geom $SUNIT_BYTES 4 $BLOCKSIZE >> $seqres.full 2>&1
        _scratch_mount