diff options
| author | Chao Yu <chao2.yu@samsung.com> | 2015-12-11 16:08:22 +0800 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-04-13 12:32:30 +0200 |
| commit | 259865ee697bcd3ff148cc83c93390c578ea4f9f (patch) | |
| tree | ca72d9e93be948cdabc6136e31b4452d225ac65a /fs/f2fs/node.c | |
| parent | 85f3ce32ed3eba4e7194249a04e55996e1b3c1a0 (diff) | |
f2fs: clean up node page updating flow
If read_node_page return LOCKED_PAGE, in its caller it's better a) skip
unneeded 'Update' flag and mapping info verfication; b) check nid value
stored in footer structure of node page.
Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Conflicts:
fs/f2fs/node.c
Diffstat (limited to 'fs/f2fs/node.c')
| -rw-r--r-- | fs/f2fs/node.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 413d7724b..b98f7ab65 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -1063,12 +1063,13 @@ repeat: if (err < 0) { f2fs_put_page(page, 1); return ERR_PTR(err); - } else if (err != LOCKED_PAGE) { - lock_page(page); + } else if (err == LOCKED_PAGE) { + goto page_hit; } - if (unlikely(!PageUptodate(page) || nid != nid_of_node(page))) { - ClearPageUptodate(page); + lock_page(page); + + if (unlikely(!PageUptodate(page))) { f2fs_put_page(page, 1); return ERR_PTR(-EIO); } @@ -1076,7 +1077,9 @@ repeat: f2fs_put_page(page, 1); goto repeat; } +page_hit: mark_page_accessed(page); + f2fs_bug_on(sbi, nid != nid_of_node(page)); return page; } @@ -1115,25 +1118,26 @@ repeat: end = start + MAX_RA_NODE; end = min(end, NIDS_PER_BLOCK); for (i = start + 1; i < end; i++) { - nid = get_nid(parent, i, false); - if (!nid) + nid_t tnid = get_nid(parent, i, false); + if (!tnid) continue; - ra_node_page(sbi, nid); + ra_node_page(sbi, tnid); } blk_finish_plug(&plug); lock_page(page); + if (unlikely(!PageUptodate(page))) { + f2fs_put_page(page, 1); + return ERR_PTR(-EIO); + } if (unlikely(page->mapping != NODE_MAPPING(sbi))) { f2fs_put_page(page, 1); goto repeat; } page_hit: - if (unlikely(!PageUptodate(page))) { - f2fs_put_page(page, 1); - return ERR_PTR(-EIO); - } mark_page_accessed(page); + f2fs_bug_on(sbi, nid != nid_of_node(page)); return page; } |
