linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] xfs_admin: unify online/offline fs label setting
@ 2019-12-02 17:37 Darrick J. Wong
  2019-12-02 17:37 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong
  2019-12-02 17:37 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong
  0 siblings, 2 replies; 7+ messages in thread
From: Darrick J. Wong @ 2019-12-02 17:37 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs

Hi all,

Here are two fixes for the xfs_admin script.  The first enables callers
to pass an external log device, because xfs_db requires that to work on
filesystems that do not have an internal log.

The second patch enables xfs_admin to call xfs_io, which is then used to
pass label get and set commands (-l and -L) to the kernel (via xfs_io) if
the filesystem is mounted.

This is an extraordinary way to destroy everything.  Enjoy!
Comments and questions are, as always, welcome.

--D

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] xfs_admin: support external log devices
  2019-12-02 17:37 [PATCH 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong
@ 2019-12-02 17:37 ` Darrick J. Wong
  2019-12-02 17:41   ` Eric Sandeen
  2019-12-02 17:37 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong
  1 sibling, 1 reply; 7+ messages in thread
From: Darrick J. Wong @ 2019-12-02 17:37 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs

From: Darrick J. Wong <darrick.wong@oracle.com>

Add to xfs_admin the ability to pass external log devices to xfs_db.
This is necessary to make changes on such filesystems.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 db/xfs_admin.sh      |   12 ++++++++++--
 man/man8/xfs_admin.8 |    3 +++
 2 files changed, 13 insertions(+), 2 deletions(-)


diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
index 305ef2b7..bd325da2 100755
--- a/db/xfs_admin.sh
+++ b/db/xfs_admin.sh
@@ -7,7 +7,7 @@
 status=0
 DB_OPTS=""
 REPAIR_OPTS=""
-USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device"
+USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]"
 
 while getopts "efjlpuc:L:U:V" c
 do
@@ -33,7 +33,15 @@ done
 set -- extra $@
 shift $OPTIND
 case $# in
-	1)	if [ -n "$DB_OPTS" ]
+	1|2)
+		# Pick up the log device, if present
+		if [ -n "$2" ]; then
+			DB_OPTS=$DB_OPTS" -l '$2'"
+			test -n "$REPAIR_OPTS" && \
+				REPAIR_OPTS=$REPAIR_OPTS" -l '$2'"
+		fi
+
+		if [ -n "$DB_OPTS" ]
 		then
 			eval xfs_db -x -p xfs_admin $DB_OPTS $1
 			status=$?
diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8
index 20a114f5..d7942418 100644
--- a/man/man8/xfs_admin.8
+++ b/man/man8/xfs_admin.8
@@ -15,6 +15,9 @@ xfs_admin \- change parameters of an XFS filesystem
 .I uuid
 ]
 .I device
+[
+.I logdev
+]
 .br
 .B xfs_admin \-V
 .SH DESCRIPTION


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] xfs_admin: enable online label getting and setting
  2019-12-02 17:37 [PATCH 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong
  2019-12-02 17:37 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong
@ 2019-12-02 17:37 ` Darrick J. Wong
  1 sibling, 0 replies; 7+ messages in thread
From: Darrick J. Wong @ 2019-12-02 17:37 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs

From: Darrick J. Wong <darrick.wong@oracle.com>

Connect xfs_admin -L to the xfs_io label command so that we can get and
set the label for a live filesystem.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 db/xfs_admin.sh |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)


diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
index bd325da2..d18959bf 100755
--- a/db/xfs_admin.sh
+++ b/db/xfs_admin.sh
@@ -7,8 +7,30 @@
 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
@@ -16,8 +38,16 @@ 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";;
-	L)	DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";;
+	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
+		;;
 	p)	DB_OPTS=$DB_OPTS" -c 'version projid32bit'";;
 	u)	DB_OPTS=$DB_OPTS" -r -c uuid";;
 	U)	DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";;
@@ -41,6 +71,14 @@ 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


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] xfs_admin: support external log devices
  2019-12-02 17:37 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong
@ 2019-12-02 17:41   ` Eric Sandeen
  2019-12-02 17:43     ` Darrick J. Wong
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Sandeen @ 2019-12-02 17:41 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs



On 12/2/19 11:37 AM, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Add to xfs_admin the ability to pass external log devices to xfs_db.
> This is necessary to make changes on such filesystems.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
>  db/xfs_admin.sh      |   12 ++++++++++--
>  man/man8/xfs_admin.8 |    3 +++
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> 
> diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
> index 305ef2b7..bd325da2 100755
> --- a/db/xfs_admin.sh
> +++ b/db/xfs_admin.sh
> @@ -7,7 +7,7 @@
>  status=0
>  DB_OPTS=""
>  REPAIR_OPTS=""
> -USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device"
> +USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]"
>  
>  while getopts "efjlpuc:L:U:V" c
>  do
> @@ -33,7 +33,15 @@ done
>  set -- extra $@
>  shift $OPTIND
>  case $# in
> -	1)	if [ -n "$DB_OPTS" ]
> +	1|2)
> +		# Pick up the log device, if present
> +		if [ -n "$2" ]; then
> +			DB_OPTS=$DB_OPTS" -l '$2'"
> +			test -n "$REPAIR_OPTS" && \
> +				REPAIR_OPTS=$REPAIR_OPTS" -l '$2'"
> +		fi
> +
> +		if [ -n "$DB_OPTS" ]
>  		then
>  			eval xfs_db -x -p xfs_admin $DB_OPTS $1
>  			status=$?
> diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8
> index 20a114f5..d7942418 100644
> --- a/man/man8/xfs_admin.8
> +++ b/man/man8/xfs_admin.8
> @@ -15,6 +15,9 @@ xfs_admin \- change parameters of an XFS filesystem
>  .I uuid
>  ]
>  .I device
> +[
> +.I logdev
> +]

logdev should be marked as optional, right?  [logdev] ?
And documented as to when this arg should (or should not be) used?

-Eric

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] xfs_admin: support external log devices
  2019-12-02 17:41   ` Eric Sandeen
@ 2019-12-02 17:43     ` Darrick J. Wong
  0 siblings, 0 replies; 7+ messages in thread
From: Darrick J. Wong @ 2019-12-02 17:43 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: linux-xfs

On Mon, Dec 02, 2019 at 11:41:13AM -0600, Eric Sandeen wrote:
> 
> 
> On 12/2/19 11:37 AM, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> > 
> > Add to xfs_admin the ability to pass external log devices to xfs_db.
> > This is necessary to make changes on such filesystems.
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> >  db/xfs_admin.sh      |   12 ++++++++++--
> >  man/man8/xfs_admin.8 |    3 +++
> >  2 files changed, 13 insertions(+), 2 deletions(-)
> > 
> > 
> > diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh
> > index 305ef2b7..bd325da2 100755
> > --- a/db/xfs_admin.sh
> > +++ b/db/xfs_admin.sh
> > @@ -7,7 +7,7 @@
> >  status=0
> >  DB_OPTS=""
> >  REPAIR_OPTS=""
> > -USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device"
> > +USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]"
> >  
> >  while getopts "efjlpuc:L:U:V" c
> >  do
> > @@ -33,7 +33,15 @@ done
> >  set -- extra $@
> >  shift $OPTIND
> >  case $# in
> > -	1)	if [ -n "$DB_OPTS" ]
> > +	1|2)
> > +		# Pick up the log device, if present
> > +		if [ -n "$2" ]; then
> > +			DB_OPTS=$DB_OPTS" -l '$2'"
> > +			test -n "$REPAIR_OPTS" && \
> > +				REPAIR_OPTS=$REPAIR_OPTS" -l '$2'"
> > +		fi
> > +
> > +		if [ -n "$DB_OPTS" ]
> >  		then
> >  			eval xfs_db -x -p xfs_admin $DB_OPTS $1
> >  			status=$?
> > diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8
> > index 20a114f5..d7942418 100644
> > --- a/man/man8/xfs_admin.8
> > +++ b/man/man8/xfs_admin.8
> > @@ -15,6 +15,9 @@ xfs_admin \- change parameters of an XFS filesystem
> >  .I uuid
> >  ]
> >  .I device
> > +[
> > +.I logdev
> > +]
> 
> logdev should be marked as optional, right?  [logdev] ?

It is.

> And documented as to when this arg should (or should not be) used?

Yes.  Will fix that.

--D

> -Eric

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 0/2] xfs_admin: unify online/offline fs label setting
@ 2020-02-05  0:02 Darrick J. Wong
  0 siblings, 0 replies; 7+ messages in thread
From: Darrick J. Wong @ 2020-02-05  0:02 UTC (permalink / raw)
  To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests

Hi all,

Unify the online and offline label setting code paths in xfs_admin so
that one program can handle both.

If you're going to start using this mess, you probably ought to just
pull from my git trees, which are linked below.

This is an extraordinary way to destroy everything.  Enjoy!
Comments and questions are, as always, welcome.

--D

fstests git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=online-label-setting

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 0/2] xfs_admin: unify online/offline fs label setting
@ 2020-01-16  5:11 Darrick J. Wong
  0 siblings, 0 replies; 7+ messages in thread
From: Darrick J. Wong @ 2020-01-16  5:11 UTC (permalink / raw)
  To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests

Hi all,

Unify the online and offline label setting code paths in xfs_admin so
that one program can handle both.

If you're going to start using this mess, you probably ought to just
pull from my git trees, which are linked below.

This is an extraordinary way to destroy everything.  Enjoy!
Comments and questions are, as always, welcome.

--D

fstests git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=online-label-setting

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-02-05  0:04 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-02 17:37 [PATCH 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong
2019-12-02 17:37 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong
2019-12-02 17:41   ` Eric Sandeen
2019-12-02 17:43     ` Darrick J. Wong
2019-12-02 17:37 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong
2020-01-16  5:11 [PATCH 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong
2020-02-05  0:02 Darrick J. Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).