[Ocfs2-commits] mfasheh commits r2248 - trunk/fs/ocfs2

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon May 16 14:32:03 CDT 2005


Author: mfasheh
Signed-off-by: jlbec
Date: 2005-05-16 14:32:02 -0500 (Mon, 16 May 2005)
New Revision: 2248

Modified:
   trunk/fs/ocfs2/alloc.c
   trunk/fs/ocfs2/aops.c
   trunk/fs/ocfs2/dlmglue.c
   trunk/fs/ocfs2/extent_map.c
   trunk/fs/ocfs2/file.c
   trunk/fs/ocfs2/inode.c
   trunk/fs/ocfs2/journal.c
   trunk/fs/ocfs2/ocfs.h
   trunk/fs/ocfs2/suballoc.c
Log:
* Print useful information when we discover some bad fs metadata.

Signed-off-by: jlbec



Modified: trunk/fs/ocfs2/alloc.c
===================================================================
--- trunk/fs/ocfs2/alloc.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/alloc.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -119,7 +119,7 @@
 
 	mlog_entry_void();
 
-	OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 
 	if (fe->i_last_eb_blk) {
 		retval = ocfs_read_block(osb, fe->i_last_eb_blk, &eb_bh, 
@@ -314,7 +314,7 @@
 	for(i = 0; i < new_blocks; i++) {
 		bh = new_eb_bhs[i];
 		eb = (ocfs2_extent_block *) bh->b_data;
-		OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		eb_el = &eb->h_list;
 
 		status = ocfs_journal_access(handle, inode, bh, 
@@ -440,7 +440,7 @@
 	}
 
 	eb = (ocfs2_extent_block *) new_eb_bh->b_data;
-	OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+	OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 	eb_el = &eb->h_list;
 	fe = (ocfs2_dinode *) fe_bh->b_data;
 	fe_el = &fe->id2.i_list;
@@ -570,7 +570,7 @@
 				goto bail;
 			}
 			eb = (ocfs2_extent_block *) eb_bhs[i]->b_data;
-			OCFS_ASSERT_RO(IS_VALID_EXTENT_BLOCK(eb));
+			OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 
 			status = ocfs_journal_access(handle, inode, eb_bhs[i], 
 						    OCFS_JOURNAL_ACCESS_WRITE);
@@ -730,7 +730,7 @@
 		}
 
 		eb = (ocfs2_extent_block *) bh->b_data;
-		OCFS_ASSERT_RO(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &eb->h_list;
 
 		if (el->l_next_free_rec < el->l_count) {
@@ -879,7 +879,7 @@
 	ocfs2_extent_list *el;
 	struct buffer_head *bh = NULL;
 
-	OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 
 	*new_last_eb = NULL;
 
@@ -928,7 +928,7 @@
 		}
 		eb = (ocfs2_extent_block *) bh->b_data;
 		el = &(eb->h_list);
-		OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 	} while (el->l_tree_depth);
 
 	*new_last_eb = bh;
@@ -1055,7 +1055,7 @@
 			goto bail;
 		}
 		eb = (ocfs2_extent_block *)eb_bh->b_data;
-		OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &(eb->h_list);
 
 		status = ocfs_journal_access(handle, inode, eb_bh,
@@ -1214,7 +1214,7 @@
 			goto bail;
 		}
 		eb = (ocfs2_extent_block *) last_eb_bh->b_data;
-		OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &(eb->h_list);
 	}
 
@@ -1338,7 +1338,7 @@
 			goto bail;
 		}
 		eb = (ocfs2_extent_block *) last_eb_bh->b_data;
-		OCFS_ASSERT(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &(eb->h_list);
 		if (el->l_recs[0].e_cpos >= new_i_clusters)
 			metadata_delete = 1;

Modified: trunk/fs/ocfs2/aops.c
===================================================================
--- trunk/fs/ocfs2/aops.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/aops.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -70,16 +70,16 @@
 	}
 	fe = (ocfs2_dinode *) bh->b_data;
 
-	if (!IS_VALID_FILE_ENTRY(fe)) {
-		mlog(ML_ERROR, "Invalid fe at blkno %llu",
-		     (unsigned long long)OCFS_I(inode)->ip_blkno);
+	if (!OCFS2_IS_VALID_DINODE(fe)) {
+		mlog(ML_ERROR, "Invalid dinode #%"MLFu64": signature = %.*s\n",
+		     fe->i_blkno, 7, fe->i_signature);
 		goto bail;
 	}
 
 	if ((u64)iblock >= ocfs2_clusters_to_blocks(inode->i_sb,
 						    fe->i_clusters)) {
-		mlog(ML_ERROR, "block offset is outside the allocated size: %llu",
-		     (unsigned long long)iblock);
+		mlog(ML_ERROR, "block offset is outside the allocated size: "
+		     "%llu\n", (unsigned long long)iblock);
 		goto bail;
 	}
 

Modified: trunk/fs/ocfs2/dlmglue.c
===================================================================
--- trunk/fs/ocfs2/dlmglue.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/dlmglue.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -1397,9 +1397,7 @@
 
 		/* This is a good chance to make sure we're not
 		 * locking an invalid object. */
-		mlog_bug_on_msg(!IS_VALID_FILE_ENTRY(fe),
-				"Invalid dinode %"MLFu64" Signature: %s\n",
-				OCFS_I(inode)->ip_blkno, fe->i_signature);
+		OCFS2_BUG_ON_INVALID_DINODE(fe);
 		mlog_bug_on_msg(inode->i_generation !=
 				le32_to_cpu(fe->i_generation),
 				"Invalid dinode %"MLFu64" disk generation: %u "

Modified: trunk/fs/ocfs2/extent_map.c
===================================================================
--- trunk/fs/ocfs2/extent_map.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/extent_map.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -226,7 +226,7 @@
 		if (ret)
 			goto out_free;
 		eb = (ocfs2_extent_block *)eb_bh->b_data;
-		OCFS_ASSERT_RO(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &eb->h_list;
 	}
 
@@ -287,7 +287,7 @@
 			return ret;
 		}
 		eb = (ocfs2_extent_block *)bh->b_data;
-		OCFS_ASSERT_RO(IS_VALID_EXTENT_BLOCK(eb));
+		OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(eb);
 		el = &eb->h_list;
 	} else {
 		spin_unlock(&OCFS_I(inode)->ip_lock);
@@ -301,7 +301,7 @@
 			return ret;
 		}
 		di = (ocfs2_dinode *)bh->b_data;
-		OCFS_ASSERT_RO(IS_VALID_FILE_ENTRY(di));
+		OCFS2_BUG_ON_INVALID_DINODE(di);
 		el = &di->id2.i_list;
 	}
 

Modified: trunk/fs/ocfs2/file.c
===================================================================
--- trunk/fs/ocfs2/file.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/file.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -456,7 +456,7 @@
 	}
 
 	fe = (ocfs2_dinode *) fe_bh->b_data;
-	OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 	OCFS_ASSERT(fe->i_size == i_size_read(inode));
 
 	if (new_i_size > fe->i_size) {
@@ -741,7 +741,7 @@
 	}
 
 	fe = (ocfs2_dinode *) bh->b_data;
-	OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 	OCFS_ASSERT(i_size_read(inode) == (fe->i_size - *bytes_extended));
 	OCFS_ASSERT(new_i_size >= i_size_read(inode));
 

Modified: trunk/fs/ocfs2/inode.c
===================================================================
--- trunk/fs/ocfs2/inode.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/inode.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -254,13 +254,13 @@
 	sb = inode->i_sb;
 	osb = OCFS2_SB(sb);
 
-	// this means that read_inode cannot create a superblock 
-	// inode today.  change if needed.
-	if (!IS_VALID_FILE_ENTRY(fe) || !(fe->i_flags & OCFS2_VALID_FL)) {
-		mlog(ML_ERROR, "invalid file entry! i_ino=%lu, "
-		     "fe->i_blkno=%"MLFu64", valid_flag = %d\n",
-		     inode->i_ino, fe->i_blkno,
-		     (fe->i_flags & OCFS2_VALID_FL));
+	/* this means that read_inode cannot create a superblock inode
+	 * today.  change if needed. */
+	if (!OCFS2_IS_VALID_DINODE(fe) || !(fe->i_flags & OCFS2_VALID_FL)) {
+		mlog(ML_ERROR, "Invalid dinode: i_ino=%lu, i_blkno=%"MLFu64", "
+		     "signature = %.*s, flags = 0x%x\n",
+		     inode->i_ino, fe->i_blkno, 7, fe->i_signature,
+		     fe->i_flags);
 		goto bail;
 	}
 
@@ -388,7 +388,7 @@
 
 	if (!args) {
 		mlog(ML_ERROR, "bad inode args\n");
-		make_bad_inode (inode);
+		make_bad_inode(inode);
 		goto bail;
 	}
 
@@ -398,13 +398,15 @@
 	status = ocfs_read_block(osb, args->blkno, &bh, 0, NULL);
 	if (status < 0) {
 		mlog_errno(status);
-		make_bad_inode (inode);
+		make_bad_inode(inode);
 		goto bail;
 	}
 
 	fe = (ocfs2_dinode *) bh->b_data;
-	if(!IS_VALID_FILE_ENTRY(fe)) {
-		make_bad_inode (inode);
+	if (!OCFS2_IS_VALID_DINODE(fe)) {
+		mlog(ML_ERROR, "Invalid dinode #%"MLFu64": signature = %.*s\n",
+		     fe->i_blkno, 7, fe->i_signature);
+		make_bad_inode(inode);
 		goto bail;
 	}
 
@@ -416,7 +418,7 @@
 	if (ocfs_populate_inode (inode, fe, 0) < 0) {
 		mlog(ML_ERROR, "populate inode failed! i_blkno=%"MLFu64", "
 		     "i_ino=%lu\n", fe->i_blkno, inode->i_ino);
-		make_bad_inode (inode);
+		make_bad_inode(inode);
 		goto bail;
 	}
 

Modified: trunk/fs/ocfs2/journal.c
===================================================================
--- trunk/fs/ocfs2/journal.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/journal.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -609,7 +609,7 @@
 	mlog_entry_void();
 
 	fe = (ocfs2_dinode *) bh->b_data;
-	OCFS_ASSERT(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 
 	flags = le32_to_cpu(fe->id1.journal1.ij_flags);
 	if (dirty)

Modified: trunk/fs/ocfs2/ocfs.h
===================================================================
--- trunk/fs/ocfs2/ocfs.h	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/ocfs.h	2005-05-16 19:32:02 UTC (rev 2248)
@@ -60,13 +60,36 @@
 
 #define  OCFS_INVALID_NODE_NUM         -1
 
-#define  IS_VALID_FILE_ENTRY(ptr)     \
+#define OCFS2_IS_VALID_DINODE(ptr)					\
 	(!strcmp((ptr)->i_signature, OCFS2_INODE_SIGNATURE))
-#define  IS_VALID_EXTENT_BLOCK(ptr)  \
+
+#define OCFS2_BUG_ON_INVALID_DINODE(__di)	do {			\
+	mlog_bug_on_msg(!OCFS2_IS_VALID_DINODE((__di)),			\
+		"Dinode # %"MLFu64" has bad signature %.*s\n",		\
+		(__di)->i_blkno, 7,					\
+		(__di)->i_signature);					\
+} while (0);
+
+#define OCFS2_IS_VALID_EXTENT_BLOCK(ptr)				\
 	(!strcmp((ptr)->h_signature, OCFS2_EXTENT_BLOCK_SIGNATURE))
-#define  IS_VALID_GROUP_DESC(ptr)    \
+
+#define OCFS2_BUG_ON_INVALID_EXTENT_BLOCK(__eb)	do {			\
+	mlog_bug_on_msg(!OCFS2_IS_VALID_EXTENT_BLOCK((__eb)),		\
+		"Extent Block # %"MLFu64" has bad signature %.*s\n",	\
+		(__eb)->h_blkno, 7,					\
+		(__eb)->h_signature);					\
+} while (0);
+
+#define OCFS2_IS_VALID_GROUP_DESC(ptr)					\
 	(!strcmp((ptr)->bg_signature, OCFS2_GROUP_DESC_SIGNATURE))
 
+#define OCFS2_BUG_ON_INVALID_GROUP_DESC(__gd)	do {			\
+	mlog_bug_on_msg(!OCFS2_IS_VALID_GROUP_DESC((__gd)),		\
+		"Group Descriptor # %"MLFu64" has bad signature %.*s\n",\
+		(__gd)->bg_blkno, 7,					\
+		(__gd)->bg_signature);					\
+} while (0);
+
 /*
 ** Structures...
 */

Modified: trunk/fs/ocfs2/suballoc.c
===================================================================
--- trunk/fs/ocfs2/suballoc.c	2005-05-16 18:36:11 UTC (rev 2247)
+++ trunk/fs/ocfs2/suballoc.c	2005-05-16 19:32:02 UTC (rev 2248)
@@ -364,7 +364,7 @@
 	}
 
 	fe = (ocfs2_dinode *) bh->b_data;
-	OCFS_ASSERT_RO(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 	OCFS_ASSERT_RO(fe->i_flags & OCFS2_CHAIN_FL);
 
 	free_bits = le32_to_cpu(fe->id1.bitmap1.i_total) - 
@@ -643,7 +643,7 @@
 	int offset, start, found, status = 0;
 	ocfs2_group_desc *bg = (ocfs2_group_desc *) bg_bh->b_data;
 
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
 
 	found = start = best_offset = best_size = 0;
 	bitmap = bg->bg_bitmap;
@@ -710,7 +710,7 @@
 
 	mlog_entry_void();
 
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
 	OCFS_ASSERT(bg->bg_free_bits_count >= num_bits);
 
 	mlog(0, "block_group_set_bits: off = %u, num = %u\n", bit_off, 
@@ -778,9 +778,9 @@
 	ocfs2_group_desc *bg = (ocfs2_group_desc *) bg_bh->b_data;
 	ocfs2_group_desc *prev_bg = (ocfs2_group_desc *) prev_bg_bh->b_data;
 
-	OCFS_ASSERT_RO(IS_VALID_FILE_ENTRY(fe));
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(prev_bg));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(prev_bg);
 
 	mlog(0, "In suballoc %"MLFu64", chain %u, move group %"MLFu64" to "
 	        "top, prev = %"MLFu64"\n",
@@ -933,7 +933,7 @@
 		goto bail;
 	}
 	bg = (ocfs2_group_desc *) group_bh->b_data;
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
 
 	status = -ENOSPC;
 	/* for now, the chain search is a bit simplistic. We just use
@@ -959,7 +959,7 @@
 			goto bail;
 		}
 		bg = (ocfs2_group_desc *) group_bh->b_data;
-		OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
+		OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
 	}
 	if (status < 0) {
 		if (status != -ENOSPC)
@@ -1067,7 +1067,7 @@
 	OCFS_ASSERT(ac->ac_bh);
 
 	fe = (ocfs2_dinode *) ac->ac_bh->b_data;
-	OCFS_ASSERT_RO(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 	OCFS_ASSERT_RO(le32_to_cpu(fe->id1.bitmap1.i_used) < 
 		       le32_to_cpu(fe->id1.bitmap1.i_total));
 
@@ -1342,7 +1342,7 @@
 
 	mlog_entry_void();
 
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(bg));
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(bg);
 
 	mlog(0, "off = %u, num = %u\n", bit_off, num_bits);
 
@@ -1396,7 +1396,7 @@
 
 	mlog_entry_void();
 
-	OCFS_ASSERT_RO(IS_VALID_FILE_ENTRY(fe));
+	OCFS2_BUG_ON_INVALID_DINODE(fe);
 	OCFS_ASSERT((count + start_bit) 
 		    <= ((u32) cl->cl_cpg * (u32) cl->cl_bpc));
 
@@ -1412,7 +1412,7 @@
 	}
 
 	group = (ocfs2_group_desc *) group_bh->b_data;
-	OCFS_ASSERT_RO(IS_VALID_GROUP_DESC(group));
+	OCFS2_BUG_ON_INVALID_GROUP_DESC(group);
 	OCFS_ASSERT((count + start_bit) <= group->bg_bits);
 
 	status = ocfs_block_group_clear_bits(handle, alloc_inode,



More information about the Ocfs2-commits mailing list