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; }