aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk.kim@samsung.com>2013-03-13 17:49:22 +0900
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-03-20 18:30:12 +0900
commit08d8058be6d11bd81f2ed75fc0ecdf55b7685655 (patch)
tree3fbc2348de9055420a92b6c7171a97f457a16965 /fs/f2fs
parentf2fs: reduce unncessary locking pages during read (diff)
downloadlinux-dev-08d8058be6d11bd81f2ed75fc0ecdf55b7685655.tar.xz
linux-dev-08d8058be6d11bd81f2ed75fc0ecdf55b7685655.zip
f2fs: should check the node page was truncated first
Currently, f2fs doesn't reclaim any node pages. However, if we found that a node page was truncated by checking its block address with zero during f2fs_write_node_page, we should not skip that node page and return zero to reclaim it. Reviewed-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/node.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 9e6ed6708fa8..90221cc7247c 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1097,13 +1097,6 @@ static int f2fs_write_node_page(struct page *page,
block_t new_addr;
struct node_info ni;
- if (wbc->for_reclaim) {
- dec_page_count(sbi, F2FS_DIRTY_NODES);
- wbc->pages_skipped++;
- set_page_dirty(page);
- return AOP_WRITEPAGE_ACTIVATE;
- }
-
wait_on_page_writeback(page);
mutex_lock_op(sbi, NODE_WRITE);
@@ -1118,6 +1111,14 @@ static int f2fs_write_node_page(struct page *page,
if (ni.blk_addr == NULL_ADDR)
goto out;
+ if (wbc->for_reclaim) {
+ dec_page_count(sbi, F2FS_DIRTY_NODES);
+ wbc->pages_skipped++;
+ set_page_dirty(page);
+ mutex_unlock_op(sbi, NODE_WRITE);
+ return AOP_WRITEPAGE_ACTIVATE;
+ }
+
set_page_writeback(page);
/* insert node offset */