Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=faeebbcdc22... Commit: faeebbcdc222b554ad066e704e0eea11bd2cdc27 Parent: 4519c9ca6f8e85713989a4faf113f6468d5a1152 Author: Bob Peterson rpeterso@redhat.com AuthorDate: Mon Mar 14 15:53:22 2016 -0400 Committer: Bob Peterson rpeterso@redhat.com CommitterDate: Fri Apr 15 08:57:14 2016 -0400
fsck.gfs2: Convert block_type to bitmap_type after pass1 and 5
This patch changes all the passes that happen after pass1 and 5 from using block_type to using bitmap_type. This is a step toward eliminating the blockmap after pass1 and pass5 are complete.
Signed-off-by: Bob Peterson rpeterso@redhat.com --- gfs2/fsck/lost_n_found.c | 4 ++-- gfs2/fsck/metawalk.c | 12 ++++++------ gfs2/fsck/pass1b.c | 6 +++--- gfs2/fsck/pass2.c | 6 +++--- gfs2/fsck/pass3.c | 8 ++++---- gfs2/fsck/pass4.c | 2 +- gfs2/fsck/util.c | 2 +- gfs2/fsck/util.h | 8 ++++++++ 8 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/gfs2/fsck/lost_n_found.c b/gfs2/fsck/lost_n_found.c index ba3ae1d..4816b3c 100644 --- a/gfs2/fsck/lost_n_found.c +++ b/gfs2/fsck/lost_n_found.c @@ -131,14 +131,14 @@ void make_sure_lf_exists(struct gfs2_inode *ip) them in sync so that pass4 can detect and fix any descrepancies. */ set_di_nlink(sdp->md.rooti);
- q = block_type(lf_dip->i_di.di_num.no_addr); + q = bitmap_type(sdp, lf_dip->i_di.di_num.no_addr); if (q != GFS2_BLKST_DINODE) { lf_was_created = 1; /* This is a new lost+found directory, so set its block type and increment link counts for the directories */ /* FIXME: i'd feel better about this if fs_mkdir returned whether it created a new directory or just found an old one, - and we used that instead of the block_type to run this */ + and we used that instead of the bitmap_type to run this */ fsck_blockmap_set(ip, lf_dip->i_di.di_num.no_addr, _("lost+found dinode"), GFS2_BLKST_DINODE); dirtree_insert(lf_dip->i_di.di_num); diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c index 8fcaea3..f401f2c 100644 --- a/gfs2/fsck/metawalk.c +++ b/gfs2/fsck/metawalk.c @@ -1045,7 +1045,7 @@ static int delete_block_if_notdup(struct gfs2_inode *ip, uint64_t block, if (!valid_block(ip->i_sbd, block)) return meta_error;
- q = block_type(block); + q = bitmap_type(ip->i_sbd, block); if (q == GFS2_BLKST_FREE) { log_info( _("%s block %lld (0x%llx), part of inode " "%lld (0x%llx), was already free.\n"), @@ -1774,7 +1774,7 @@ int remove_dentry_from_dir(struct gfs2_sbd *sdp, uint64_t dir, remove_dentry_fxns.private = &dentryblock; remove_dentry_fxns.check_dentry = remove_dentry;
- q = block_type(dir); + q = bitmap_type(sdp, dir); if (q != GFS2_BLKST_DINODE) { log_info( _("Parent block is not an inode...ignoring\n")); return 1; @@ -1825,7 +1825,7 @@ static int del_eattr_generic(struct gfs2_inode *ip, uint64_t block, uint8_t q;
if (valid_block(ip->i_sbd, block)) { - q = block_type(block); + q = bitmap_type(ip->i_sbd, block); if (q == GFS2_BLKST_FREE) was_free = 1; ret = delete_block_if_notdup(ip, block, NULL, eatype, @@ -1925,7 +1925,7 @@ static int alloc_metalist(struct gfs2_inode *ip, uint64_t block, *is_valid = 1; *was_duplicate = 0; *bh = bread(ip->i_sbd, block); - q = block_type(block); + q = bitmap_type(ip->i_sbd, block); if (q == GFS2_BLKST_FREE) { log_debug(_("%s reference to new metadata block " "%lld (0x%llx) is now marked as indirect.\n"), @@ -1947,7 +1947,7 @@ static int alloc_data(struct gfs2_inode *ip, uint64_t metablock, /* No need to range_check here--if it was added, it's in range. */ /* We can't check the bitmap here because this function is called after the bitmap has been set but before the blockmap has. */ - q = block_type(block); + q = bitmap_type(ip->i_sbd, block); if (q == GFS2_BLKST_FREE) { log_debug(_("%s reference to new data block " "%lld (0x%llx) is now marked as data.\n"), @@ -1965,7 +1965,7 @@ static int alloc_leaf(struct gfs2_inode *ip, uint64_t block, void *private) /* No need to range_check here--if it was added, it's in range. */ /* We can't check the bitmap here because this function is called after the bitmap has been set but before the blockmap has. */ - q = block_type(block); + q = bitmap_type(ip->i_sbd, block); if (q == GFS2_BLKST_FREE) fsck_blockmap_set(ip, block, _("newly allocated leaf"), ip->i_sbd->gfs1 ? GFS2_BLKST_DINODE : diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c index 16c0aec..66dd0a8 100644 --- a/gfs2/fsck/pass1b.c +++ b/gfs2/fsck/pass1b.c @@ -216,7 +216,7 @@ static void resolve_dup_references(struct gfs2_sbd *sdp, struct duptree *dt, return;
this_ref = get_ref_type(id); - q = block_type(id->block_no); + q = bitmap_type(sdp, id->block_no); if (inval) log_warn( _("Invalid ")); /* FIXME: If we already found an acceptable reference to this @@ -525,7 +525,7 @@ static void resolve_last_reference(struct gfs2_sbd *sdp, struct duptree *dt, if (dt->dup_flags & DUPFLAG_REF1_IS_DUPL) clone_dup_ref_in_inode(ip, dt);
- q = block_type(id->block_no); + q = bitmap_type(sdp, id->block_no); if (q == GFS2_BLKST_UNLINKED) { log_debug( _("The remaining reference inode %lld (0x%llx) is " "marked invalid: Marking the block as free.\n"), @@ -883,7 +883,7 @@ int pass1b(struct gfs2_sbd *sdp) "duplicates.\n"), dups_found); break; } - q = block_type(i); + q = bitmap_type(sdp, i);
if (q == GFS2_BLKST_FREE || q == GFS2_BLKST_USED) continue; diff --git a/gfs2/fsck/pass2.c b/gfs2/fsck/pass2.c index 11777eb..afee8dc 100644 --- a/gfs2/fsck/pass2.c +++ b/gfs2/fsck/pass2.c @@ -506,7 +506,7 @@ static int basic_dentry_checks(struct gfs2_inode *ip, struct gfs2_dirent *dent, tmp_name); }
- *q = block_type(entry->no_addr); + *q = bitmap_type(sdp, entry->no_addr); /* Get the status of the directory inode */ /** * 1. Blocks marked "invalid" were invalidated due to duplicate @@ -1720,7 +1720,7 @@ static int check_system_dir(struct gfs2_inode *sysinode, const char *dirname, }
iblock = sysinode->i_di.di_num.no_addr; - ds.q = block_type(iblock); + ds.q = bitmap_type(sysinode->i_sbd, iblock);
pass2_fxns.private = (void *) &ds; if (ds.q == GFS2_BLKST_UNLINKED) { @@ -1998,7 +1998,7 @@ int pass2(struct gfs2_sbd *sdp) if (is_system_dir(sdp, dirblk)) continue;
- q = block_type(dirblk); + q = bitmap_type(sdp, dirblk); if (q != GFS2_BLKST_DINODE) continue;
diff --git a/gfs2/fsck/pass3.c b/gfs2/fsck/pass3.c index 054953f..7732178 100644 --- a/gfs2/fsck/pass3.c +++ b/gfs2/fsck/pass3.c @@ -75,7 +75,7 @@ static struct dir_info *mark_and_return_parent(struct gfs2_sbd *sdp, return NULL;
if (di->dotdot_parent.no_addr == di->treewalk_parent) { - q_dotdot = block_type(di->dotdot_parent.no_addr); + q_dotdot = bitmap_type(sdp, di->dotdot_parent.no_addr); if (q_dotdot != GFS2_BLKST_DINODE) { log_err( _("Orphaned directory at block %llu (0x%llx) " "moved to lost+found\n"), @@ -95,9 +95,9 @@ static struct dir_info *mark_and_return_parent(struct gfs2_sbd *sdp, (unsigned long long)di->dotdot_parent.no_addr, (unsigned long long)di->treewalk_parent, (unsigned long long)di->treewalk_parent); - q_dotdot = block_type(di->dotdot_parent.no_addr); + q_dotdot = bitmap_type(sdp, di->dotdot_parent.no_addr); dt_dotdot = dirtree_find(di->dotdot_parent.no_addr); - q_treewalk = block_type(di->treewalk_parent); + q_treewalk = bitmap_type(sdp, di->treewalk_parent); dt_treewalk = dirtree_find(di->treewalk_parent); /* if the dotdot entry isn't a directory, but the * treewalk is, treewalk is correct - if the treewalk @@ -249,7 +249,7 @@ int pass3(struct gfs2_sbd *sdp) di = tdi; continue; } - q = block_type(di->dinode.no_addr); + q = bitmap_type(sdp, di->dinode.no_addr); if (q == GFS2_BLKST_UNLINKED) { log_err( _("Found unlinked directory " "containing bad block at block %llu" diff --git a/gfs2/fsck/pass4.c b/gfs2/fsck/pass4.c index 850a2fe..c3fb30a 100644 --- a/gfs2/fsck/pass4.c +++ b/gfs2/fsck/pass4.c @@ -70,7 +70,7 @@ static int scan_inode_list(struct gfs2_sbd *sdp) { log_err( _("Found unlinked inode at %llu (0x%llx)\n"), (unsigned long long)ii->di_num.no_addr, (unsigned long long)ii->di_num.no_addr); - q = block_type(ii->di_num.no_addr); + q = bitmap_type(sdp, ii->di_num.no_addr); if (q == GFS2_BLKST_UNLINKED) { log_err( _("Unlinked inode %llu (0x%llx) contains " "bad blocks\n"), diff --git a/gfs2/fsck/util.c b/gfs2/fsck/util.c index 84402fc..44a41ba 100644 --- a/gfs2/fsck/util.c +++ b/gfs2/fsck/util.c @@ -372,7 +372,7 @@ int add_duplicate_ref(struct gfs2_inode *ip, uint64_t block, return meta_error; } id->block_no = ip->i_di.di_num.no_addr; - q = block_type(ip->i_di.di_num.no_addr); + q = bitmap_type(ip->i_sbd, ip->i_di.di_num.no_addr); /* If it's an invalid dinode, put it first on the invalid inode reference list otherwise put it on the normal list. */ if (!inode_valid || q == GFS2_BLKST_UNLINKED) diff --git a/gfs2/fsck/util.h b/gfs2/fsck/util.h index 62f8ca6..7d842e2 100644 --- a/gfs2/fsck/util.h +++ b/gfs2/fsck/util.h @@ -59,6 +59,14 @@ static inline uint8_t block_type(uint64_t bblock) return btype; }
+static inline uint8_t bitmap_type(struct gfs2_sbd *sdp, uint64_t bblock) +{ + struct rgrp_tree *rgd; + + rgd = gfs2_blk2rgrpd(sdp, bblock); + return lgfs2_get_bitmap(sdp, bblock, rgd); +} + static const inline char *block_type_string(uint8_t q) { const char *blktyp[] = {"free", "data", "other", "inode", "invalid"};
cluster-commits@lists.fedorahosted.org