Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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, "b_blocknr=%llu\n",
		     (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