diff options
author | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-10-16 08:09:26 +0200 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-10-18 02:44:14 +0200 |
commit | 87a9bd265678ec3cc8431b14bcb14c68d0f94032 (patch) | |
tree | 8e9b83647295f111ca19be91d154f673fea10331 /fs/f2fs/node.c | |
parent | f2fs: avoid wait if IO end up when do_checkpoint for better performance (diff) | |
download | linux-87a9bd265678ec3cc8431b14bcb14c68d0f94032.tar.xz linux-87a9bd265678ec3cc8431b14bcb14c68d0f94032.zip |
f2fs: avoid to write during the recovery
This patch enhances the recovery routine not to write any data/node/meta until
its completion.
If any writes are sent to the disk, it could contaminate the written history
that will be used for further recovery.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r-- | fs/f2fs/node.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 51ef27894433..ef80f791b02b 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -1156,6 +1156,9 @@ static int f2fs_write_node_page(struct page *page, block_t new_addr; struct node_info ni; + if (sbi->por_doing) + goto redirty_out; + wait_on_page_writeback(page); /* get old block addr of this node page */ @@ -1171,12 +1174,8 @@ static int f2fs_write_node_page(struct page *page, return 0; } - if (wbc->for_reclaim) { - dec_page_count(sbi, F2FS_DIRTY_NODES); - wbc->pages_skipped++; - set_page_dirty(page); - return AOP_WRITEPAGE_ACTIVATE; - } + if (wbc->for_reclaim) + goto redirty_out; mutex_lock(&sbi->node_write); set_page_writeback(page); @@ -1186,6 +1185,12 @@ static int f2fs_write_node_page(struct page *page, mutex_unlock(&sbi->node_write); unlock_page(page); return 0; + +redirty_out: + dec_page_count(sbi, F2FS_DIRTY_NODES); + wbc->pages_skipped++; + set_page_dirty(page); + return AOP_WRITEPAGE_ACTIVATE; } /* |