[PATCH] xfs_admin: revert online label setting ability

Eric Sandeen
2020-03-01T17:50:22Z

The changes to xfs_admin which allowed online label setting via
ioctl had some unintended consequences in terms of changing command
order and processing. It's going to be somewhat tricky to fix, so
back it out for now.

Reverts: 3f153e051a ("xfs_admin: enable online label getting and setting")

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---

diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
index d18959bf..bd325da2 100755
--- a/db/xfs_admin.sh
+++ b/db/xfs_admin.sh
@@ -7,30 +7,8 @@
status=0
DB_OPTS=""
REPAIR_OPTS=""
-IO_OPTS=""
USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]"

-# Try to find a loop device associated with a file. We only want to return
-# one loopdev (multiple loop devices can attach to a single file) so we grab
-# the last line and return it if it's actually a block device.
-try_find_loop_dev_for_file() {
- local x="$(losetup -O NAME -j "$1" 2> /dev/null | tail -n 1)"
- test -b "$x" && echo "$x"
-}
-
-# See if we can find a mount point for the argument.
-find_mntpt_for_arg() {
- local arg="$1"
-
- # See if we can map the arg to a loop device
- local loopdev="$(try_find_loop_dev_for_file "${arg}")"
- test -n "$loopdev" && arg="$loopdev"
-
- # If we find a mountpoint for the device, do a live query;
- # otherwise try reading the fs with xfs_db.
- findmnt -t xfs -f -n -o TARGET "${arg}" 2> /dev/null
-}
-
while getopts "efjlpuc:L:U:V" c
do
case $c in
@@ -38,16 +16,8 @@ do
e) DB_OPTS=$DB_OPTS" -c 'version extflg'";;
f) DB_OPTS=$DB_OPTS" -f";;
j) DB_OPTS=$DB_OPTS" -c 'version log2'";;
- l) DB_OPTS=$DB_OPTS" -r -c label"
- IO_OPTS=$IO_OPTS" -r -c label"
- ;;
- L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'"
- if [ "$OPTARG" = "--" ]; then
- IO_OPTS=$IO_OPTS" -c 'label -c'"
- else
- IO_OPTS=$IO_OPTS" -c 'label -s "$OPTARG"'"
- fi
- ;;
+ l) DB_OPTS=$DB_OPTS" -r -c label";;
+ L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";;
p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'";;
u) DB_OPTS=$DB_OPTS" -r -c uuid";;
U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";;
@@ -71,14 +41,6 @@ case $# in
REPAIR_OPTS=$REPAIR_OPTS" -l '$2'"
fi

- # Try making the changes online, if supported
- if [ -n "$IO_OPTS" ] && mntpt="$(find_mntpt_for_arg "$1")"
- then
- eval xfs_io -x -p xfs_admin $IO_OPTS "$mntpt"
- test "$?" -eq 0 && exit 0
- fi
-
- # Otherwise try offline changing
if [ -n "$DB_OPTS" ]
then
eval xfs_db -x -p xfs_admin $DB_OPTS $1
diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8
index 220dd803..8afc873f 100644
--- a/man/man8/xfs_admin.8
+++ b/man/man8/xfs_admin.8
@@ -26,7 +26,7 @@ uses the
.BR xfs_db (8)
command to modify various parameters of a filesystem.
.PP
-Devices that are mounted cannot be modified, except as noted below.
+Devices that are mounted cannot be modified.
Administrators must unmount filesystems before
.BR xfs_admin " or " xfs_db (8)
can convert parameters.
@@ -67,7 +67,6 @@ log buffers).
.TP
.B \-l
Print the current filesystem label.
-This command can be run if the filesystem is mounted.
.TP
.B \-p
Enable 32bit project identifier support (PROJID32BIT feature).
@@ -103,7 +102,6 @@ The filesystem label can be cleared using the special "\c
.B \-\-\c
" value for
.IR label .
-This command can be run if the filesystem is mounted.
.TP
.BI \-U " uuid"
Set the UUID of the filesystem to