From: Gerald Yang Date: Tue, 13 Aug 2024 07:25:51 +0000 (+0800) Subject: fsck.xfs: fix fsck.xfs run by different shells when fsck.mode=force is set X-Git-Tag: v6.11.0~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=19dde7fac0f38af2990e367ef4dd8ec512920c12;p=thirdparty%2Fxfsprogs-dev.git fsck.xfs: fix fsck.xfs run by different shells when fsck.mode=force is set When fsck.mode=force is specified in the kernel command line, fsck.xfs is executed during the boot process. However, when the default shell is not bash, $PS1 should be a different value, consider the following script: cat ps1.sh echo "$PS1" run ps1.sh with different shells: ash ./ps1.sh $ bash ./ps1.sh dash ./ps1.sh $ ksh ./ps1.sh zsh ./ps1.sh On systems like Ubuntu, where dash is the default shell during the boot process to improve startup speed. This results in FORCE being incorrectly set to false and then xfs_repair is not invoked: if [ -n "$PS1" -o -t 0 ]; then FORCE=false fi Other distros may encounter this issue too if the default shell is set to anoother shell. Check "-t 0" is enough to determine if we are in interactive mode, and xfs_repair is invoked as expected regardless of the shell used. Fixes: 04a2d5dc ("fsck.xfs: allow forced repairs using xfs_repair") Signed-off-by: Gerald Yang Reviewed-by: Darrick J. Wong --- diff --git a/fsck/xfs_fsck.sh b/fsck/xfs_fsck.sh index 62a1e0b3..19ada9a7 100755 --- a/fsck/xfs_fsck.sh +++ b/fsck/xfs_fsck.sh @@ -55,12 +55,12 @@ fi # directly. # # Use multiple methods to capture most of the cases: -# The case for *i* and -n "$PS1" are commonly suggested in bash manual +# The case for *i* is commonly suggested in bash manual # and the -t 0 test checks stdin case $- in *i*) FORCE=false ;; esac -if [ -n "$PS1" -o -t 0 ]; then +if [ -t 0 ]; then FORCE=false fi