diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-10-10 00:11:38 +0200 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-10-12 22:38:03 +0200 |
commit | a56c7c6fb3c60857c1335bcb8b914e6f65655486 (patch) | |
tree | b05bb39180addddee4376a8e6d6169776375eb62 /fs/f2fs/file.c | |
parent | f2fs: fix SSA updates resulting in corruption (diff) | |
download | linux-a56c7c6fb3c60857c1335bcb8b914e6f65655486.tar.xz linux-a56c7c6fb3c60857c1335bcb8b914e6f65655486.zip |
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>
Diffstat (limited to 'fs/f2fs/file.c')
-rw-r--r-- | fs/f2fs/file.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 8d5583b21e5d..5d2a2ee35742 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -505,14 +505,14 @@ static int truncate_partial_data_page(struct inode *inode, u64 from, return 0; if (cache_only) { - page = grab_cache_page(mapping, index); + page = f2fs_grab_cache_page(mapping, index, false); if (page && PageUptodate(page)) goto truncate_out; f2fs_put_page(page, 1); return 0; } - page = get_lock_data_page(inode, index); + page = get_lock_data_page(inode, index, true); if (IS_ERR(page)) return 0; truncate_out: @@ -879,7 +879,7 @@ static int __exchange_data_block(struct inode *inode, pgoff_t src, } else { struct page *psrc, *pdst; - psrc = get_lock_data_page(inode, src); + psrc = get_lock_data_page(inode, src, true); if (IS_ERR(psrc)) return PTR_ERR(psrc); pdst = get_new_data_page(inode, NULL, dst, false); |