erofs: fix erofs_get_meta_page locking due to a cleanup
After doing more drop_caches stress test on
our products, I found the mistake introduced by
a very recent cleanup [1].
The current rule is that "erofs_get_meta_page"
should be returned with page locked (although
it's mostly unnecessary for read-only fs after
pages are PG_uptodate), but a fix should be
done for this.
[1] https://lore.kernel.org/r/20190904020912.63925-26-gaoxiang25@huawei.com
Fixes: 618f40ea02
("erofs: use read_cache_page_gfp for erofs_get_meta_page")
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Link: https://lore.kernel.org/r/20190921184355.149928-1-gaoxiang25@huawei.com
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
This commit is contained in:
parent
6927cc05c2
commit
55252ab72b
|
@ -34,11 +34,15 @@ static void erofs_readendio(struct bio *bio)
|
|||
|
||||
struct page *erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr)
|
||||
{
|
||||
struct inode *const bd_inode = sb->s_bdev->bd_inode;
|
||||
struct address_space *const mapping = bd_inode->i_mapping;
|
||||
struct address_space *const mapping = sb->s_bdev->bd_inode->i_mapping;
|
||||
struct page *page;
|
||||
|
||||
return read_cache_page_gfp(mapping, blkaddr,
|
||||
page = read_cache_page_gfp(mapping, blkaddr,
|
||||
mapping_gfp_constraint(mapping, ~__GFP_FS));
|
||||
/* should already be PageUptodate */
|
||||
if (!IS_ERR(page))
|
||||
lock_page(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
static int erofs_map_blocks_flatmode(struct inode *inode,
|
||||
|
|
Loading…
Reference in New Issue