mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ext4: avoid deadlocks in the writeback path by using sb_getblk_gfp
commit c45653c341f5c8a0ce19c8f0ad4678640849cb86 upstream. Switch ext4 to using sb_getblk_gfp with GFP_NOFS added to fix possible deadlocks in the page writeback path. Signed-off-by: Nikolay Borisov <kernel@kyup.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> [lizf: Backported to 3.4: adjust context] Signed-off-by: Zefan Li <lizefan@huawei.com>
This commit is contained in:
parent
e47e85894f
commit
1ceff7efd3
1 changed files with 4 additions and 3 deletions
|
@ -699,7 +699,8 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
|
|||
path[ppos].p_depth = i;
|
||||
path[ppos].p_ext = NULL;
|
||||
|
||||
bh = sb_getblk(inode->i_sb, path[ppos].p_block);
|
||||
bh = sb_getblk_gfp(inode->i_sb, path[ppos].p_block,
|
||||
__GFP_MOVABLE | GFP_NOFS);
|
||||
if (unlikely(!bh)) {
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
|
@ -904,7 +905,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
|
|||
err = -EIO;
|
||||
goto cleanup;
|
||||
}
|
||||
bh = sb_getblk(inode->i_sb, newblock);
|
||||
bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
|
||||
if (!bh) {
|
||||
err = -ENOMEM;
|
||||
goto cleanup;
|
||||
|
@ -1088,7 +1089,7 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
|
|||
if (newblock == 0)
|
||||
return err;
|
||||
|
||||
bh = sb_getblk(inode->i_sb, newblock);
|
||||
bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
|
||||
if (!bh)
|
||||
return -ENOMEM;
|
||||
lock_buffer(bh);
|
||||
|
|
Loading…
Reference in a new issue