Commit acf8fdbe authored by Joseph Qi's avatar Joseph Qi Committed by Linus Torvalds

ocfs2: do not BUG if buffer not uptodate in __ocfs2_journal_access

When storage network is unstable, it may trigger the BUG in
__ocfs2_journal_access because of buffer not uptodate.  We can retry the
write in this case or return error instead of BUG.
Signed-off-by: default avatarJoseph Qi <joseph.qi@huawei.com>
Reported-by: default avatarZhangguanghui <zhang.guanghui@h3c.com>
Tested-by: default avatarZhangguanghui <zhang.guanghui@h3c.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent faaebf18
...@@ -668,7 +668,23 @@ static int __ocfs2_journal_access(handle_t *handle, ...@@ -668,7 +668,23 @@ static int __ocfs2_journal_access(handle_t *handle,
mlog(ML_ERROR, "giving me a buffer that's not uptodate!\n"); mlog(ML_ERROR, "giving me a buffer that's not uptodate!\n");
mlog(ML_ERROR, "b_blocknr=%llu\n", mlog(ML_ERROR, "b_blocknr=%llu\n",
(unsigned long long)bh->b_blocknr); (unsigned long long)bh->b_blocknr);
BUG();
lock_buffer(bh);
/*
* A previous attempt to write this buffer head failed.
* Nothing we can do but to retry the write and hope for
* the best.
*/
if (buffer_write_io_error(bh) && !buffer_uptodate(bh)) {
clear_buffer_write_io_error(bh);
set_buffer_uptodate(bh);
}
if (!buffer_uptodate(bh)) {
unlock_buffer(bh);
return -EIO;
}
unlock_buffer(bh);
} }
/* Set the current transaction information on the ci so /* Set the current transaction information on the ci so
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment