common/xfs: Check if write supports [-c|-d] option in xfs_db
authorxiao yang <yangx.jy@cn.fujitsu.com>
Tue, 16 Jan 2018 07:26:55 +0000 (15:26 +0800)
committerEryu Guan <eguan@redhat.com>
Fri, 19 Jan 2018 03:01:44 +0000 (11:01 +0800)
Make sure _scratch_xfs_set_metadata_field() can be used on an
old xfsprogs-dev(e.g. v3.1.1).

The "-d" option was introduced since xfsprogs-dev v4.7.0 by commit
86769b3 ("xfs_db: allow recalculating CRCs on invalid metadata").

The special argument "--" is only used to end option-scanning
in getopt().  getopt() was introduced since xfsprogs-dev v3.2.3 by
commit c9f5e3d ("xfs_db: Allow writes of corrupted data")'.

Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
common/xfs

index 45b84a04f46c1c2cf8222f4538441510fe6d8741..ab58364079dd3978bd399fbde30a7b41a42abd7b 100644 (file)
@@ -658,8 +658,11 @@ _scratch_xfs_set_metadata_field()
        for arg in "$@"; do
                cmds+=("-c" "${arg}")
        done
-       _scratch_xfs_db -x "${cmds[@]}" -c "write -d ${key} -- ${value}"
-       echo
+
+       local wr_cmd="write"
+       _scratch_xfs_db -x -c "help write" | egrep -q "(-c|-d)" && value="-- ${value}"
+       _scratch_xfs_db -x -c "help write" | egrep -q "(-d)" && wr_cmd="${wr_cmd} -d"
+       _scratch_xfs_db -x "${cmds[@]}" -c "${wr_cmd} ${key} ${value}"
 }
 
 _scratch_xfs_get_sb_field()