f2fs: relocate readahead codes in readdir()
Previously, for large directory, we just do readahead only once in readdir(), readdir()'s performance may drop when traversing latter blocks. In order to avoid this, relocate readahead codes to covering all traverse flow. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
c8be47b540
commit
4d6e68be25
1 changed files with 5 additions and 5 deletions
|
@ -870,11 +870,6 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
|
|||
goto out_free;
|
||||
}
|
||||
|
||||
/* readahead for multi pages of dir */
|
||||
if (npages - n > 1 && !ra_has_index(ra, n))
|
||||
page_cache_sync_readahead(inode->i_mapping, ra, file, n,
|
||||
min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
|
||||
|
||||
for (; n < npages; n++) {
|
||||
|
||||
/* allow readdir() to be interrupted */
|
||||
|
@ -884,6 +879,11 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
|
|||
}
|
||||
cond_resched();
|
||||
|
||||
/* readahead for multi pages of dir */
|
||||
if (npages - n > 1 && !ra_has_index(ra, n))
|
||||
page_cache_sync_readahead(inode->i_mapping, ra, file, n,
|
||||
min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
|
||||
|
||||
dentry_page = get_lock_data_page(inode, n, false);
|
||||
if (IS_ERR(dentry_page)) {
|
||||
err = PTR_ERR(dentry_page);
|
||||
|
|
Loading…
Add table
Reference in a new issue