cluster: STABLE3 - Misc blocklist optimizations

Bob Peterson rpeterso at fedoraproject.org
Tue Jan 26 21:18:57 UTC 2010


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=bbfbde76dde0ce9a504015ac07dc483f4e1fdc32
Commit:        bbfbde76dde0ce9a504015ac07dc483f4e1fdc32
Parent:        b7d8ec76e2dc8d5ccfbab2bb74319ee966d51da8
Author:        Bob Peterson <bob at ganesha.peterson>
AuthorDate:    Wed Nov 25 14:35:29 2009 -0600
Committer:     Bob Peterson <rpeterso at redhat.com>
CommitterDate: Tue Jan 26 14:39:27 2010 -0600

Misc blocklist optimizations

rhbz#455300
---
 gfs2/fsck/fsck.h          |    1 -
 gfs2/fsck/metawalk.c      |    3 ++-
 gfs2/libgfs2/block_list.c |   37 ++++++++++++-------------------------
 3 files changed, 14 insertions(+), 27 deletions(-)

diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index 0431e4b..dae785c 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -59,7 +59,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 b60b8ca..8db0274 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -14,7 +14,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 6af4f38..e5e6962 100644
--- a/gfs2/libgfs2/block_list.c
+++ b/gfs2/libgfs2/block_list.c
@@ -13,7 +13,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)
@@ -52,20 +52,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;
@@ -254,7 +240,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);
@@ -276,16 +262,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;
 }
 


More information about the cluster-commits mailing list