From 4ea83faf04c48a1edab308751a41cf17d571981c Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=2E=C3=87a=C4=9Flar=20Onur?= Date: Wed, 11 Aug 2010 10:15:16 -0400 Subject: [PATCH] handle fsck return codes in a different code path --- source/steps/ValidateNodeInstall.py | 4 ++-- source/utils.py | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/source/steps/ValidateNodeInstall.py b/source/steps/ValidateNodeInstall.py index 4b0761d..143b49b 100644 --- a/source/steps/ValidateNodeInstall.py +++ b/source/steps/ValidateNodeInstall.py @@ -90,13 +90,13 @@ def Run( vars, log ): try: # first run fsck to prevent fs corruption from hanging mount... log.write( "fsck %s file system\n" % filesystem ) - utils.sysexec("e2fsck -v -p %s" % (PARTITIONS[filesystem]),log) + utils.sysexec("e2fsck -v -p %s" % (PARTITIONS[filesystem]),log, True) except BootManagerException, e: log.write( "BootManagerException during fsck of %s (%s) filesystem : %s\n" % (filesystem, PARTITIONS[filesystem], str(e)) ) try: log.write( "Trying to recover filesystem errors on %s\n" % filesystem ) - utils.sysexec("e2fsck -v -y %s" % (PARTITIONS[filesystem]),log) + utils.sysexec("e2fsck -v -y %s" % (PARTITIONS[filesystem]),log, True) except BootManagerException, e: log.write( "BootManagerException during trying to recover filesystem errors on %s (%s) filesystem : %s\n" % (filesystem, PARTITIONS[filesystem], str(e)) ) diff --git a/source/utils.py b/source/utils.py index fcd1ab1..696f3f3 100644 --- a/source/utils.py +++ b/source/utils.py @@ -121,7 +121,7 @@ def removedir( path ): -def sysexec( cmd, log= None ): +def sysexec( cmd, log= None, fsck = False ): """ execute a system command, output the results to the logger if log <> None @@ -148,8 +148,22 @@ def sysexec( cmd, log= None ): log.write(stdoutdata) returncode = prog.wait() - if returncode != 0: - raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode) + + if fsck: + # The exit code returned by fsck is the sum of the following conditions: + # 0 - No errors + # 1 - File system errors corrected + # 2 - System should be rebooted + # 4 - File system errors left uncorrected + # 8 - Operational error + # 16 - Usage or syntax error + # 32 - Fsck canceled by user request + # 128 - Shared library error + if returncode != 0 or returncode != 1: + raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode) + else: + if returncode != 0: + raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode) prog = None return 1 -- 2.43.0