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:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user