f2fs: reduce unncessary locking pages during read

This patch reduces redundant locking and unlocking pages during read operations.
In f2fs_readpage, let's use wait_on_page_locked() instead of lock_page.
And then, when we need to modify any data finally, let's lock the page so that
we can avoid lock contention.

[readpage rule]
- The f2fs_readpage returns unlocked page, or released page too in error cases.
- Its caller should handle read error, -EIO, after locking the page, which
  indicates read completion.
- Its caller should check PageUptodate after grab_cache_page.

Signed-off-by: Changman Lee <cm224.lee@samsung.com>
Reviewed-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
Jaegeuk Kim
2013-03-08 21:29:23 +09:00
parent 25c0a6e529
commit 393ff91f57
4 changed files with 96 additions and 73 deletions

View File

@@ -57,13 +57,15 @@ repeat:
cond_resched();
goto repeat;
}
if (f2fs_readpage(sbi, page, index, READ_SYNC)) {
f2fs_put_page(page, 1);
goto repeat;
}
mark_page_accessed(page);
if (PageUptodate(page))
goto out;
/* We do not allow returning an errorneous page */
if (f2fs_readpage(sbi, page, index, READ_SYNC))
goto repeat;
lock_page(page);
out:
mark_page_accessed(page);
return page;
}