commit ac9968edda6cd6d42e91adc6dc8440f8ed480011 Author: Bob Peterson <bob@ganesha.peterson> Date: Thu Jan 21 17:55:59 2010 -0600 fsck.gfs2: should use the libgfs2 is_system_directory The fsck.gfs2 program had its own implementation of the standard function to determine if a dinode in memory was one of the system dinodes. The difference was that the fsck.gfs2 version ignored the journal inodes and instead checked the lost+found dinode. This has been standardized. rhbz#455300 diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c index 8fc20d0..79b4bdd 100644 --- a/gfs2/fsck/metawalk.c +++ b/gfs2/fsck/metawalk.c @@ -29,30 +29,6 @@ #define COMFORTABLE_BLKS 5242880 /* 20GB in 4K blocks */ -static struct gfs2_inode *get_system_inode(struct gfs2_sbd *sbp, - uint64_t block) -{ - if (block == sbp->md.inum->i_di.di_num.no_addr) - return sbp->md.inum; - if (block == sbp->md.statfs->i_di.di_num.no_addr) - return sbp->md.statfs; - if (block == sbp->md.jiinode->i_di.di_num.no_addr) - return sbp->md.jiinode; - if (block == sbp->md.riinode->i_di.di_num.no_addr) - return sbp->md.riinode; - if (block == sbp->md.qinode->i_di.di_num.no_addr) - return sbp->md.qinode; - if (block == sbp->md.pinode->i_di.di_num.no_addr) - return sbp->md.pinode; - if (block == sbp->md.rooti->i_di.di_num.no_addr) - return sbp->md.rooti; - if (block == sbp->master_dir->i_di.di_num.no_addr) - return sbp->master_dir; - if (lf_dip && block == lf_dip->i_di.di_num.no_addr) - return lf_dip; - return is_system_inode(sbp, block); -} - struct duptree *dupfind(uint64_t block) { struct osi_node *node = dup_blocks.osi_node; @@ -70,13 +46,21 @@ struct duptree *dupfind(uint64_t block) return NULL; } +static struct gfs2_inode *fsck_system_inode(struct gfs2_sbd *sdp, + uint64_t block) +{ + if (lf_dip && lf_dip->i_di.di_num.no_addr == block) + return lf_dip; + return is_system_inode(sdp, block); +} + /* fsck_load_inode - same as gfs2_load_inode() in libgfs2 but system inodes get special treatment. */ struct gfs2_inode *fsck_load_inode(struct gfs2_sbd *sbp, uint64_t block) { struct gfs2_inode *ip = NULL; - ip = get_system_inode(sbp, block); + ip = fsck_system_inode(sbp, block); if (ip) return ip; return inode_read(sbp, block); @@ -89,7 +73,7 @@ struct gfs2_inode *fsck_inode_get(struct gfs2_sbd *sdp, { struct gfs2_inode *sysip; - sysip = get_system_inode(sdp, bh->b_blocknr); + sysip = fsck_system_inode(sdp, bh->b_blocknr); if (sysip) return sysip; @@ -103,7 +87,7 @@ void fsck_inode_put(struct gfs2_inode **ip_in) struct gfs2_inode *ip = *ip_in; struct gfs2_inode *sysip; - sysip = get_system_inode(ip->i_sbd, ip->i_di.di_num.no_addr); + sysip = fsck_system_inode(ip->i_sbd, ip->i_di.di_num.no_addr); if (!sysip) inode_put(ip_in); }