diff options
| author | Jaegeuk Kim <jaegeuk@kernel.org> | 2017-07-19 10:59:55 -0700 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-09-08 13:50:16 +0200 |
| commit | bcf081236103c9f4472ed177017d890c2a88d98e (patch) | |
| tree | 4c926598c814108591c5e4eb77ab1a96055dbed5 /fs/f2fs/segment.c | |
| parent | a0b55d2aa35643d57516e62f516fe9694ed4b8bc (diff) | |
FROMLIST: f2fs: give a try to do atomic write in -ENOMEM case
It'd be better to retry writing atomic pages when we get -ENOMEM.
(url https://www.spinics.net/lists/linux-fsdevel/msg113844.html)
Bug: 63260873
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/segment.c')
| -rw-r--r-- | fs/f2fs/segment.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 5148cda38..51a8bc8b4 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -368,17 +368,21 @@ static int __commit_inmem_pages(struct inode *inode, inode_dec_dirty_pages(inode); remove_dirty_inode(inode); } - +retry: fio.page = page; fio.old_blkaddr = NULL_ADDR; fio.encrypted_page = NULL; fio.need_lock = LOCK_DONE; err = do_write_data_page(&fio); if (err) { + if (err == -ENOMEM) { + congestion_wait(BLK_RW_ASYNC, HZ/50); + cond_resched(); + goto retry; + } unlock_page(page); break; } - /* record old blkaddr for revoking */ cur->old_addr = fio.old_blkaddr; last_idx = page->index; |
