Split out the code that fetches the rgrps at a trust level into its own
function and restructure it with gotos as subsequent changes would add
too much nesting otherwise.

Signed-off-by: Andrew Price <[email protected]>
---
 gfs2/fsck/initialize.c | 59 ++++++++++++++++++++++++------------------
 1 file changed, 34 insertions(+), 25 deletions(-)

diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index 5f176dca..0cafeb95 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -730,13 +730,9 @@ static int ri_update(struct gfs2_sbd *sdp, int *rgcount, 
int *ok)
        return -1;
 }
 
-/**
- * fetch_rgrps - fetch the resource groups from disk, and check their integrity
- */
-static int fetch_rgrps(struct gfs2_sbd *sdp)
+static int fetch_rgrps_level(struct gfs2_sbd *sdp, enum rgindex_trust_level 
lvl, int *count, int *ok)
 {
-       enum rgindex_trust_level trust_lvl;
-       int rgcount, ok = 1;
+       int ret = 1;
 
        const char *level_desc[] = {
                _("Checking if all rgrp and rindex values are good"),
@@ -752,30 +748,43 @@ static int fetch_rgrps(struct gfs2_sbd *sdp)
                _("Too many rgrp misses: rgrps must be unevenly spaced"),
                _("Too much damage found: we cannot rebuild this rindex"),
        };
-       /*******************************************************************
-        ********  Validate and read in resource group information  ********
-        *******************************************************************/
+
+       log_notice(_("Level %d resource group check: %s.\n"), lvl + 1, 
level_desc[lvl]);
+
+       if (rg_repair(sdp, lvl, count, ok) != 0)
+               goto fail;
+
+       ret = ri_update(sdp, count, ok);
+       if (ret != 0)
+               goto fail;
+
+       log_notice(_("(level %d passed)\n"), lvl + 1);
+       return 0;
+fail:
+       if (ret == -1)
+               log_err(_("(level %d failed: %s)\n"), lvl + 1, fail_desc[lvl]);
+       else
+               log_err(_("(level %d failed at block %d (0x%x): %s)\n"), lvl + 
1,
+                       ret, ret, fail_desc[lvl]);
+       return ret;
+}
+
+/**
+ * fetch_rgrps - fetch the resource groups from disk, and check their integrity
+ */
+static int fetch_rgrps(struct gfs2_sbd *sdp)
+{
+       enum rgindex_trust_level trust_lvl;
+       int rgcount;
+       int ok = 1;
+
        log_notice(_("Validating resource group index.\n"));
        for (trust_lvl = blind_faith; trust_lvl <= indignation; trust_lvl++) {
                int ret = 0;
 
-               log_notice(_("Level %d resource group check: %s.\n"), trust_lvl 
+ 1,
-                         level_desc[trust_lvl]);
-               if ((rg_repair(sdp, trust_lvl, &rgcount, &ok) == 0) &&
-                   ((ret = ri_update(sdp, &rgcount, &ok)) == 0)) {
-                       log_notice(_("(level %d passed)\n"), trust_lvl + 1);
+               ret = fetch_rgrps_level(sdp, trust_lvl, &rgcount, &ok);
+               if (ret == 0)
                        break;
-               } else {
-                       if (ret == -1)
-                               log_err( _("(level %d failed: %s)\n"),
-                                        trust_lvl + 1, fail_desc[trust_lvl]);
-                       else
-                               log_err( _("(level %d failed at block %lld "
-                                          "(0x%llx): %s)\n"), trust_lvl + 1,
-                                        (unsigned long long)ret,
-                                        (unsigned long long)ret,
-                                        fail_desc[trust_lvl]);
-               }
                if (fsck_abort)
                        break;
        }
-- 
2.30.2

Reply via email to