summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
authorJaegeuk Kim2016-09-10 01:59:39 +0200
committerJaegeuk Kim2016-09-13 22:02:29 +0200
commite8ea9b3d7e278d2ef4b60e703f780ceee70cb331 (patch)
tree2ec0fd1ad038bb20032706ed8bc66552d5df9fdb /fs/f2fs/node.c
parentf2fs: add common iget in add_fsync_inode (diff)
downloadkernel-qcow2-linux-e8ea9b3d7e278d2ef4b60e703f780ceee70cb331.tar.gz
kernel-qcow2-linux-e8ea9b3d7e278d2ef4b60e703f780ceee70cb331.tar.xz
kernel-qcow2-linux-e8ea9b3d7e278d2ef4b60e703f780ceee70cb331.zip
f2fs: avoid ENOMEM during roll-forward recovery
This patch gives another chances during roll-forward recovery regarding to -ENOMEM. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 8a288004e6fd..2322a8e817bf 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2013,10 +2013,12 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
if (unlikely(old_ni.blk_addr != NULL_ADDR))
return -EINVAL;
-
+retry:
ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false);
- if (!ipage)
- return -ENOMEM;
+ if (!ipage) {
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
+ goto retry;
+ }
/* Should not use this inode from free nid list */
remove_free_nid(NM_I(sbi), ino);