[PATCH 3/5] xfs_scrub_all: add CLI option for easier debugging

Darrick J. Wong
2023-12-31T22:59:38Z

Add a new CLI argument to make it easier to figure out what exactly the
program is doing.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
scrub/xfs_scrub_all.in | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/scrub/xfs_scrub_all.in b/scrub/xfs_scrub_all.in
index 09fedff9d96..d5d1d13a255 100644
--- a/scrub/xfs_scrub_all.in
+++ b/scrub/xfs_scrub_all.in
@@ -24,6 +24,7 @@ from datetime import timezone
retcode = 0
terminate = False
scrub_media = False
+debug = False

def DEVNULL():
'''Return /dev/null in subprocess writable format.'''
@@ -110,6 +111,11 @@ class scrub_subprocess(scrub_control):
'''Start xfs_scrub and wait for it to complete. Returns -1 if
the service was not started, 0 if it succeeded, or 1 if it
failed.'''
+ global debug
+
+ if debug:
+ print('run ', ' '.join(self.cmdline))
+
try:
self.proc = subprocess.Popen(self.cmdline)
self.proc.wait()
@@ -122,6 +128,10 @@ class scrub_subprocess(scrub_control):

def stop(self):
'''Stop xfs_scrub.'''
+ global debug
+
+ if debug:
+ print('kill ', ' '.join(self.cmdline))
if self.proc is not None:
self.proc.terminate()

@@ -182,8 +192,12 @@ class scrub_service(scrub_control):
'''Start the service and wait for it to complete. Returns -1
if the service was not started, 0 if it succeeded, or 1 if it
failed.'''
+ global debug
+
cmd = ['systemctl', 'start', self.unitname]
try:
+ if debug:
+ print(' '.join(cmd))
proc = subprocess.Popen(cmd, stdout = DEVNULL())
proc.wait()
ret = proc.returncode
@@ -201,7 +215,11 @@ class scrub_service(scrub_control):

def stop(self):
'''Stop the service.'''
+ global debug
+
cmd = ['systemctl', 'stop', self.unitname]
+ if debug:
+ print(' '.join(cmd))
x = subprocess.Popen(cmd)
x.wait()

@@ -366,10 +384,12 @@ def main():
a = (mnt, cond, running_devs, devs, killfuncs)
thr = threading.Thread(target = run_scrub, args = a)
thr.start()
- global retcode, terminate, scrub_media
+ global retcode, terminate, scrub_media, debug

parser = argparse.ArgumentParser( \
description = "Scrub all mounted XFS filesystems.")
+ parser.add_argument("--debug", help = "Enabling debugging messages.", \
+ action = "store_true")
parser.add_argument("-V", help = "Report version and exit.", \
action = "store_true")
parser.add_argument("-x", help = "Scrub file data after filesystem metadata.", \
@@ -384,6 +404,9 @@ def main():
print("xfs_scrub_all version @pkg_version@")
sys.exit(0)

+ if args.debug:
+ debug = True
+
if args.auto_media_scan_interval is not None:
try:
scrub_media = enable_automatic_media_scan(args)