From: Bob Peterson <rpete...@redhat.com>

This patch speeds up the block rangecheck functions by passing
the block type in as an integer rather than a translated string
constant.  The translation functions were a bit costly.

rhbz#675723
---
 gfs2/fsck/pass1.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index 3e6b816..60e7cce 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1052,9 +1052,14 @@ static int invalidate_eattr_leaf(struct gfs2_inode *ip, 
uint64_t block,
  * be trusted. Thus it needs to be in a separate loop.
  * Returns: 0 if good range, otherwise != 0
  */
+enum b_types { btype_meta, btype_leaf, btype_data, btype_ieattr, btype_eattr};
+const char *btypes[5] = {
+       "metadata", "leaf", "data", "indirect extended attribute",
+       "extended attribute" };
+
 static int rangecheck_block(struct gfs2_inode *ip, uint64_t block,
-                           struct gfs2_buffer_head **bh,
-                           const char *btype, void *private)
+                           struct gfs2_buffer_head **bh, enum b_types btype,
+                           void *private)
 {
        long *bad_pointers = (long *)private;
        uint8_t q;
@@ -1063,7 +1068,7 @@ static int rangecheck_block(struct gfs2_inode *ip, 
uint64_t block,
                (*bad_pointers)++;
                log_info( _("Bad %s block pointer (invalid or out of range "
                            "#%ld) found in inode %lld (0x%llx).\n"),
-                         btype, *bad_pointers,
+                         btypes[btype], *bad_pointers,
                          (unsigned long long)ip->i_di.di_num.no_addr,
                          (unsigned long long)ip->i_di.di_num.no_addr);
                if ((*bad_pointers) <= BAD_POINTER_TOLERANCE)
@@ -1077,7 +1082,7 @@ static int rangecheck_block(struct gfs2_inode *ip, 
uint64_t block,
                (*bad_pointers)++;
                log_info( _("Duplicated %s block pointer (violation %ld, block"
                            " %lld (0x%llx)) found in inode %lld (0x%llx).\n"),
-                         btype, *bad_pointers,
+                         btypes[btype], *bad_pointers,
                          (unsigned long long)block, (unsigned long long)block,
                          (unsigned long long)ip->i_di.di_num.no_addr,
                          (unsigned long long)ip->i_di.di_num.no_addr);
@@ -1093,36 +1098,33 @@ static int rangecheck_metadata(struct gfs2_inode *ip, 
uint64_t block,
                               struct gfs2_buffer_head **bh, int h,
                               void *private)
 {
-       return rangecheck_block(ip, block, bh, _("metadata"), private);
+       return rangecheck_block(ip, block, bh, btype_meta, private);
 }
 
 static int rangecheck_leaf(struct gfs2_inode *ip, uint64_t block,
                           void *private)
 {
-       return rangecheck_block(ip, block, NULL, _("leaf"), private);
+       return rangecheck_block(ip, block, NULL, btype_leaf, private);
 }
 
 static int rangecheck_data(struct gfs2_inode *ip, uint64_t block,
                           void *private)
 {
-       return rangecheck_block(ip, block, NULL, _("data"), private);
+       return rangecheck_block(ip, block, NULL, btype_data, private);
 }
 
 static int rangecheck_eattr_indir(struct gfs2_inode *ip, uint64_t block,
                                  uint64_t parent,
                                  struct gfs2_buffer_head **bh, void *private)
 {
-       return rangecheck_block(ip, block, NULL,
-                               _("indirect extended attribute"),
-                               private);
+       return rangecheck_block(ip, block, NULL, btype_ieattr, private);
 }
 
 static int rangecheck_eattr_leaf(struct gfs2_inode *ip, uint64_t block,
                                 uint64_t parent, struct gfs2_buffer_head **bh,
                                 void *private)
 {
-       return rangecheck_block(ip, block, NULL, _("extended attribute"),
-                               private);
+       return rangecheck_block(ip, block, NULL, btype_eattr, private);
 }
 
 struct metawalk_fxns rangecheck_fxns = {
-- 
1.7.7.5

Reply via email to