f2fs: set GFP_NOFS for grab_cache_page
For normal inodes, their pages are allocated with __GFP_FS, which can cause filesystem calls when reclaiming memory. This can incur a dead lock condition accordingly. So, this patch addresses this problem by introducing f2fs_grab_cache_page(.., bool for_write), which calls grab_cache_page_write_begin() with AOP_FLAG_NOFS. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
@@ -550,7 +550,7 @@ static void move_encrypted_block(struct inode *inode, block_t bidx)
|
||||
int err;
|
||||
|
||||
/* do not read out */
|
||||
page = grab_cache_page(inode->i_mapping, bidx);
|
||||
page = f2fs_grab_cache_page(inode->i_mapping, bidx, false);
|
||||
if (!page)
|
||||
return;
|
||||
|
||||
@@ -620,7 +620,7 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type)
|
||||
{
|
||||
struct page *page;
|
||||
|
||||
page = get_lock_data_page(inode, bidx);
|
||||
page = get_lock_data_page(inode, bidx, true);
|
||||
if (IS_ERR(page))
|
||||
return;
|
||||
|
||||
@@ -714,7 +714,7 @@ next_step:
|
||||
|
||||
start_bidx = start_bidx_of_node(nofs, F2FS_I(inode));
|
||||
data_page = get_read_data_page(inode,
|
||||
start_bidx + ofs_in_node, READA);
|
||||
start_bidx + ofs_in_node, READA, true);
|
||||
if (IS_ERR(data_page)) {
|
||||
iput(inode);
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user