[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