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

Commit 7f1468d1 authored by Dmitry Monakhov's avatar Dmitry Monakhov Committed by Theodore Ts'o
Browse files

ext4: fix double unlock buffer mess during fs-resize



bh_submit_read() is responsible for unlock bh on endio.  In addition,
we need to use bh_uptodate_or_lock() to avoid races.

Signed-off-by: default avatarDmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent f2a09af6
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -1181,17 +1181,12 @@ static struct buffer_head *ext4_get_bitmap(struct super_block *sb, __u64 block)
	struct buffer_head *bh = sb_getblk(sb, block);
	if (!bh)
		return NULL;

	if (bitmap_uptodate(bh))
		return bh;

	lock_buffer(bh);
	if (!bh_uptodate_or_lock(bh)) {
		if (bh_submit_read(bh) < 0) {
		unlock_buffer(bh);
			brelse(bh);
			return NULL;
		}
	unlock_buffer(bh);
	}

	return bh;
}