Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 9383e745e23602bc45f9c92184feea59 > files > 67

gfs2-utils-0.1.62-28.el5.src.rpm

commit f6cdc874f5caa267d13f0f6741765bfaa2c24284
Author: Bob Peterson <bob@ganesha.peterson>
Date:   Wed Nov 25 14:35:29 2009 -0600

    Misc blocklist optimizations
    
    rhbz#455300

diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index 7cf0d8b..497be3a 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -71,7 +71,6 @@ enum rgindex_trust_level { /* how far can we trust our RG index? */
 			  gfs2_grow or something.  Count the RGs by hand. */
 };
 
-struct gfs2_inode *get_system_inode(struct gfs2_sbd *sbp, uint64_t block);
 struct gfs2_inode *fsck_load_inode(struct gfs2_sbd *sbp, uint64_t block);
 struct gfs2_inode *fsck_inode_get(struct gfs2_sbd *sdp,
 				  struct gfs2_buffer_head *bh);
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index 70c3be6..38e1c00 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -27,7 +27,8 @@
 #include "metawalk.h"
 #include "hash.h"
 
-struct gfs2_inode *get_system_inode(struct gfs2_sbd *sbp, uint64_t block)
+static struct gfs2_inode *get_system_inode(struct gfs2_sbd *sbp,
+					   uint64_t block)
 {
 	int j;
 
diff --git a/gfs2/libgfs2/block_list.c b/gfs2/libgfs2/block_list.c
index 208897b..7fec19d 100644
--- a/gfs2/libgfs2/block_list.c
+++ b/gfs2/libgfs2/block_list.c
@@ -26,7 +26,7 @@ static int mark_to_gbmap[16] = {
 	FREE, BLOCK_IN_USE, DIR_INDIR_BLK, DIR_INODE, FILE_INODE,
 	LNK_INODE, BLK_INODE, CHR_INODE, FIFO_INODE, SOCK_INODE,
 	DIR_LEAF_INODE, JOURNAL_BLK, OTHER_META, EATTR_META,
-	INVALID_META, INVALID_META
+	BAD_BLOCK, INVALID_META
 };
 
 #define BITMAP_SIZE4(size) (size >> 1)
@@ -65,20 +65,6 @@ static int gfs2_bitmap_set(struct gfs2_bmap *bmap, uint64_t offset, uint8_t val)
 	return -1;
 }
 
-static int gfs2_bitmap_get(struct gfs2_bmap *bmap, uint64_t bit, uint8_t *val)
-{
-	static char *byte;
-	static uint64_t b;
-
-	if(bit < bmap->size) {
-		byte = bmap->map + BITMAP_SIZE4(bit);
-		b = BITMAP_BYTE_OFFSET4(bit);
-		*val = (*byte & (BITMAP_MASK4 << b )) >> b;
-		return 0;
-	}
-	return -1;
-}
-
 static int gfs2_bitmap_clear(struct gfs2_bmap *bmap, uint64_t offset)
 {
 	static char *byte;
@@ -267,7 +253,7 @@ int gfs2_block_unmark(struct gfs2_sbd *sdp, struct gfs2_bmap *il,
 int gfs2_block_clear(struct gfs2_sbd *sdp, struct gfs2_bmap *il,
 		     uint64_t block)
 {
-	int err = 0;
+	int err;
 
 	gfs2_dup_clear(&sdp->dup_blocks, block);
 	gfs2_special_clear(&sdp->eattr_blocks, block);
@@ -289,16 +275,17 @@ int gfs2_block_set(struct gfs2_sbd *sdp, struct gfs2_bmap *il,
 int gfs2_block_check(struct gfs2_sbd *sdp, struct gfs2_bmap *il,
 		     uint64_t block, struct gfs2_block_query *val)
 {
-	int err = 0;
+	static char *byte;
+	static uint64_t b;
+
+	if(block >= il->size)
+		return -1;
 
-	val->dup_block = 0;
-	val->eattr_block = 0;
-	if (dupfind(&sdp->dup_blocks, block))
-		val->dup_block = 1;
-	if (blockfind(&sdp->eattr_blocks, block))
-		val->eattr_block = 1;
-	if((err = gfs2_bitmap_get(il, block, &val->block_type)))
-		return err;
+	val->dup_block = (dupfind(&sdp->dup_blocks, block) ? 1 : 0);
+	val->eattr_block = (blockfind(&sdp->eattr_blocks, block) ? 1 : 0);
+	byte = il->map + BITMAP_SIZE4(block);
+	b = BITMAP_BYTE_OFFSET4(block);
+	val->block_type = (*byte & (BITMAP_MASK4 << b )) >> b;
 	return 0;
 }