On Tue, Aug 13, 2024 at 03:25:51PM +0800, Gerald Yang wrote: > 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 <gerald.yang@xxxxxxxxxxxxx> > --- > fsck/xfs_fsck.sh | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > 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 ;; I can't remember why we allow any argument with the letter 'i' in it to derail an xfs_repair -f invocation?? Regardless, the bits you changed look correct so Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > esac > -if [ -n "$PS1" -o -t 0 ]; then > +if [ -t 0 ]; then > FORCE=false > fi > > -- > 2.43.0 > >