From: Dmitry Monakhov Date: Wed, 26 Sep 2012 03:19:25 +0000 (-0400) Subject: ext4: fix double unlock buffer mess during fs-resize X-Git-Tag: upstream/snapshot3+hdmi~6363^2~35 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f1468d1d50d368097ab13596dc08eaba7eace7f;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git 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: Dmitry Monakhov Signed-off-by: "Theodore Ts'o" --- diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index 9f821ce..f21fdbf 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -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_submit_read(bh) < 0) { - unlock_buffer(bh); - brelse(bh); - return NULL; + if (!bh_uptodate_or_lock(bh)) { + if (bh_submit_read(bh) < 0) { + brelse(bh); + return NULL; + } } - unlock_buffer(bh); return bh; }