提交 acf8fdbe 编写于 作者: J Joseph Qi 提交者: 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: NJoseph Qi <joseph.qi@huawei.com>
Reported-by: NZhangguanghui <zhang.guanghui@h3c.com>
Tested-by: NZhangguanghui <zhang.guanghui@h3c.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册