Sophie

Sophie

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

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

commit d770495f365c8ded3ecc3e83a67fdc02b7dceb4d
Author: Bob Peterson <bob@ganesha.peterson>
Date:   Mon Jan 25 10:21:16 2010 -0600

    fsck.gfs2: use gfs2_meta_inval vs. gfs2_inval_inode
    
    This patch removes the vestigial gfs2_journal_blk and reuses it
    for a new gfs2_inode_invalid.  This allows the code to keep better
    track of invalid inodes rather than other invalid metadata.  For
    invalid inodes, there may be cases where we want to invalidate its
    metadata list.  We can't do that for other kinds of metadata like
    invalid eattrs.
    
    rhbz#455300

diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index 61aecb2..bfa247d 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -781,7 +781,7 @@ static int handle_di(struct gfs2_sbd *sdp, struct gfs2_buffer_head *bh,
 		break;
 	default:
 		if (fsck_blockmap_set(ip, block, _("invalid mode"),
-				      gfs2_meta_inval)) {
+				      gfs2_inode_invalid)) {
 			stack;
 			fsck_inode_put(&ip);
 			return -1;
diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c
index 0d030f0..a78a7a5 100644
--- a/gfs2/fsck/pass1b.c
+++ b/gfs2/fsck/pass1b.c
@@ -181,7 +181,8 @@ static int clear_dup_metalist(struct gfs2_inode *ip, uint64_t block,
 		/* Setting the block to invalid means the inode is
 		 * cleared in pass2 */
 		fsck_blockmap_set(ip, ip->i_di.di_num.no_addr,
-				  _("inode with duplicate"), gfs2_meta_inval);
+				  _("inode with duplicate"),
+				  gfs2_inode_invalid);
 	}
 	return 0;
 }
@@ -435,7 +436,7 @@ static int handle_dup_blk(struct gfs2_sbd *sbp, struct duptree *b)
 				   is cleared in pass2 */
 				fsck_blockmap_set(ip, ip->i_di.di_num.no_addr,
 						 _("inode with bad duplicate"),
-						 gfs2_meta_inval);
+						 gfs2_inode_invalid);
 				fsck_inode_put(&ip);
 			} else {
 				log_warn( _("The bad inode was not cleared."));
@@ -480,7 +481,7 @@ static int handle_dup_blk(struct gfs2_sbd *sbp, struct duptree *b)
 			check_metatree(ip, &clear_dup_fxns);
 
 		fsck_blockmap_set(ip, ip->i_di.di_num.no_addr,
-				  _("inode with duplicate"), gfs2_meta_inval);
+				  _("bad"), gfs2_inode_invalid);
 		fsck_inode_put(&ip); /* out, brelse, free */
 		dh.ref_inode_count--;
 		if(dh.ref_inode_count == 1)
@@ -527,20 +528,18 @@ int pass1b(struct gfs2_sbd *sbp)
 		log_debug( _("Scanning block %" PRIu64 " (0x%" PRIx64 ") for inodes\n"),
 				  i, i);
 		q = block_type(i);
-		if((q == gfs2_inode_dir) ||
-		   (q == gfs2_inode_file) ||
-		   (q == gfs2_inode_lnk) ||
-		   (q == gfs2_inode_blk) ||
-		   (q == gfs2_inode_chr) ||
-		   (q == gfs2_inode_fifo) ||
-		   (q == gfs2_inode_sock)) {
-			for (n = osi_first(&dup_blocks); n; n = osi_next(n)) {
-				b = (struct duptree *)n;
-				if(find_block_ref(sbp, i, b)) {
-					stack;
-					rc = FSCK_ERROR;
-					goto out;
-				}
+
+		if (q < gfs2_inode_dir)
+			continue;
+		if (q > gfs2_inode_sock)
+			continue;
+
+		for (n = osi_first(&dup_blocks); n; n = osi_next(n)) {
+			b = (struct duptree *)n;
+			if(find_block_ref(sbp, i, b)) {
+				stack;
+				rc = FSCK_ERROR;
+				goto out;
 			}
 		}
 		if(q == gfs2_inode_dir) {
diff --git a/gfs2/fsck/pass2.c b/gfs2/fsck/pass2.c
index 6201baa..480715d 100644
--- a/gfs2/fsck/pass2.c
+++ b/gfs2/fsck/pass2.c
@@ -235,7 +235,7 @@ static int check_dentry(struct gfs2_inode *ip, struct gfs2_dirent *dent,
 		}
 		fsck_blockmap_set(ip, ip->i_di.di_num.no_addr,
 				  _("corrupt directory entry"),
-				  gfs2_meta_inval);
+				  gfs2_inode_invalid);
 		log_err( _("Bad directory entry deleted.\n"));
 		return 1;
 	}
@@ -264,7 +264,7 @@ static int check_dentry(struct gfs2_inode *ip, struct gfs2_dirent *dent,
 
 	q = block_type(entryblock);
 	/* Get the status of the directory inode */
-	if(q == gfs2_bad_block) {
+	if(q == gfs2_inode_invalid || q == gfs2_bad_block) {
 		/* This entry's inode has bad blocks in it */
 
 		/* Handle bad blocks */
@@ -295,7 +295,7 @@ static int check_dentry(struct gfs2_inode *ip, struct gfs2_dirent *dent,
 			 (unsigned long long)entryblock,
 			 (unsigned long long)ip->i_di.di_num.no_addr,
 			 (unsigned long long)ip->i_di.di_num.no_addr,
-			 q, q == gfs2_meta_inval ?
+			 q, q == gfs2_inode_invalid ?
 			 _("previously marked invalid") :
 			 _("is not an inode"));
 
@@ -562,7 +562,7 @@ int check_system_dir(struct gfs2_inode *sysinode, const char *dirname,
 	}
 	if (error > 0)
 		fsck_blockmap_set(sysinode, iblock, dirname,
-				  gfs2_meta_inval);
+				  gfs2_inode_invalid);
 
 	if(check_inode_eattr(sysinode, &pass2_fxns)) {
 		stack;
@@ -751,8 +751,8 @@ int pass2(struct gfs2_sbd *sbp)
 				   (unsigned long long)dirblk);
 			/* Can't use fsck_blockmap_set here because we don't
 			   have an inode in memory. */
-			gfs2_blockmap_set(bl, dirblk, gfs2_meta_inval);
-			check_n_fix_bitmap(sbp, dirblk, gfs2_meta_inval);
+			gfs2_blockmap_set(bl, dirblk, gfs2_inode_invalid);
+			check_n_fix_bitmap(sbp, dirblk, gfs2_inode_invalid);
 		}
 		ip = fsck_load_inode(sbp, dirblk);
 		if(!ds.dotdir) {
diff --git a/gfs2/fsck/pass5.c b/gfs2/fsck/pass5.c
index 98eefdb..43cd28d 100644
--- a/gfs2/fsck/pass5.c
+++ b/gfs2/fsck/pass5.c
@@ -28,6 +28,7 @@ static int convert_mark(uint8_t q, uint32_t *count)
 	switch(q) {
 
 	case gfs2_meta_inval:
+	case gfs2_inode_invalid:
 		/* Convert invalid metadata to free blocks */
 	case gfs2_block_free:
 		count[0]++;
@@ -49,7 +50,6 @@ static int convert_mark(uint8_t q, uint32_t *count)
 
 	case gfs2_indir_blk:
 	case gfs2_leaf_blk:
-	case gfs2_journal_blk:
 	case gfs2_meta_other:
 	case gfs2_meta_eattr:
 		count[2]++;
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index 6324449..5514067 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -277,7 +277,7 @@ enum gfs2_mark_block {
 	gfs2_inode_fifo    = (0x8),
 	gfs2_inode_sock    = (0x9),
 
-	gfs2_journal_blk   = (0xa),
+	gfs2_inode_invalid = (0xa),
 	gfs2_meta_inval    = (0xb),
 	gfs2_leaf_blk      = (0xc),
 	gfs2_meta_other    = (0xd),