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 <dmonakhov@openvz.org> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
Родитель
f2a09af645
Коммит
7f1468d1d5
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче