]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: refactor multi-fsb object detection decision making
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 26 Apr 2019 20:40:24 +0000 (15:40 -0500)
committerEric Sandeen <sandeen@redhat.com>
Fri, 26 Apr 2019 20:40:24 +0000 (15:40 -0500)
Pull the "is this a multi-fsb object" decision into a separate function
that we can keep close to the actual multi-fsb object dispatcher.  We
will soon make the machinery more complex so we do this to avoid having
a big hairy if statement.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/metadump.c

index 83a257d00ab408754304a463e37c4639aa0326dc..23ecf3b740fc4186efd4744a33da5a5eed9301bd 100644 (file)
@@ -1979,6 +1979,16 @@ out_pop:
        return ret;
 }
 
+static bool
+is_multi_fsb_object(
+       struct xfs_mount        *mp,
+       typnm_t                 btype)
+{
+       if (btype == TYP_DIR2 && mp->m_dir_geo->fsbcount > 1)
+               return true;
+       return false;
+}
+
 static int
 process_multi_fsb_objects(
        xfs_fileoff_t   o,
@@ -2011,6 +2021,7 @@ process_bmbt_reclist(
        xfs_fileoff_t           last;
        xfs_agnumber_t          agno;
        xfs_agblock_t           agbno;
+       bool                    is_multi_fsb = is_multi_fsb_object(mp, btype);
        int                     error;
 
        if (btype == TYP_DATA)
@@ -2074,11 +2085,12 @@ process_bmbt_reclist(
                }
 
                /* multi-extent blocks require special handling */
-               if (btype != TYP_DIR2 || mp->m_dir_geo->fsbcount == 1) {
-                       error = process_single_fsb_objects(o, s, c, btype, last);
-               } else {
-                       error = process_multi_fsb_objects(o, s, c, btype, last);
-               }
+               if (is_multi_fsb)
+                       error = process_multi_fsb_objects(o, s, c, btype,
+                                       last);
+               else
+                       error = process_single_fsb_objects(o, s, c, btype,
+                                       last);
                if (error)
                        return 0;
        }