[Ocfs2-commits] smushran commits r2416 - trunk/fs/ocfs2

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Tue Jun 21 17:03:52 CDT 2005


Author: smushran
Signed-off-by: mfasheh
Date: 2005-06-21 17:03:49 -0500 (Tue, 21 Jun 2005)
New Revision: 2416

Modified:
   trunk/fs/ocfs2/journal.c
Log:
bug#486 mount oopses when journal is too small
fixed
Signed-off-by: mfasheh

Modified: trunk/fs/ocfs2/journal.c
===================================================================
--- trunk/fs/ocfs2/journal.c	2005-06-21 20:47:34 UTC (rev 2415)
+++ trunk/fs/ocfs2/journal.c	2005-06-21 22:03:49 UTC (rev 2416)
@@ -485,15 +485,15 @@
 
 #define OCFS2_DEFAULT_COMMIT_INTERVAL 	(HZ * 5)
 
-int ocfs2_journal_init(ocfs2_journal *journal,
-		       int *dirty) 
+int ocfs2_journal_init(ocfs2_journal *journal, int *dirty)
 {
 	int status = -1;
 	struct inode *inode = NULL; /* the journal inode */
 	journal_t *j_journal = NULL;
-	ocfs2_dinode *fe = NULL;
+	ocfs2_dinode *di = NULL;
 	struct buffer_head *bh = NULL;
 	ocfs2_super *osb;
+	int meta_lock = 0;
 
 	mlog_entry_void();
 
@@ -502,7 +502,7 @@
 	osb = journal->j_osb;
 
 	/* already have the inode for our journal */
-	inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE, 
+	inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
 					    osb->slot_num);
 	if (inode == NULL) {
 		status = -EACCES;
@@ -526,28 +526,21 @@
 			mlog(ML_ERROR, "Could not get lock on journal!\n");
 		goto done;
 	}
-	fe = (ocfs2_dinode *)bh->b_data;
 
-	if (fe->i_size <  OCFS2_MIN_JOURNAL_SIZE) {
-		mlog(ML_ERROR, "Journal file size (%"MLFu64") is too small!",
-		     fe->i_size);
+	meta_lock = 1;
+	di = (ocfs2_dinode *)bh->b_data;
+
+	if (inode->i_size <  OCFS2_MIN_JOURNAL_SIZE) {
+		mlog(ML_ERROR, "Journal file size (%"MLFu64") is too small!\n",
+		     inode->i_size);
 		status = -EINVAL;
 		goto done;
 	}
 
-	mlog(0, "fe->i_size = %"MLFu64"\n", fe->i_size);
-	mlog(0, "fe->i_clusters = %u\n", fe->i_clusters);
-	mlog(0, "fe->i_blkno = %"MLFu64"\n", fe->i_blkno);
+	mlog(0, "inode->i_size = %"MLFu64"\n", inode->i_size);
+	mlog(0, "inode->i_blocks = %lu\n", inode->i_blocks);
 	mlog(0, "inode->ip_clusters = %u\n", OCFS2_I(inode)->ip_clusters);
 
-	if (OCFS2_I(inode)->ip_clusters != fe->i_clusters) 
-		mlog(ML_ERROR, "inode and fe alloc sizes differ! (%u != %u",
-		     OCFS2_I(inode)->ip_clusters, fe->i_clusters);
-	if (inode->i_size != fe->i_size)
-		mlog(ML_ERROR,
-		     "inode and fe i_size's differ! (%lld != %"MLFu64")",
-		     inode->i_size, fe->i_size);
-
 	/* call the kernels journal init function now */
 	j_journal = journal_init_inode(inode);
 	if (j_journal == NULL) {
@@ -567,7 +560,7 @@
 		j_journal->j_flags &= ~JFS_BARRIER;
 	spin_unlock(&j_journal->j_state_lock);
 
-	*dirty = (le32_to_cpu(fe->id1.journal1.ij_flags) &
+	*dirty = (le32_to_cpu(di->id1.journal1.ij_flags) &
 		  OCFS2_JOURNAL_DIRTY_FL);
 
 	journal->j_journal = j_journal;
@@ -579,9 +572,10 @@
 	status = 0;
 done:
 	if (status < 0) {
-		if (bh != NULL) {
+		if (meta_lock)
+			ocfs2_meta_unlock(inode, 1);
+		if (bh != NULL)
 			brelse(bh);
-		}
 		if (inode) {
 			OCFS2_I(inode)->ip_open_count--;
 			iput(inode);



More information about the Ocfs2-commits mailing list