f2fs: no need to take page lock in readdir
VFS will take inode_lock for readdir, therefore no need to take page lock in readdir at all just as the majority of other generic filesystems. This patch improves concurrency since .iterate_shared was introduced to VFS years ago. Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
e46f6bd82c
commit
613f3dcdf0
@ -896,7 +896,7 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
|
|||||||
page_cache_sync_readahead(inode->i_mapping, ra, file, n,
|
page_cache_sync_readahead(inode->i_mapping, ra, file, n,
|
||||||
min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
|
min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
|
||||||
|
|
||||||
dentry_page = f2fs_get_lock_data_page(inode, n, false);
|
dentry_page = f2fs_find_data_page(inode, n);
|
||||||
if (IS_ERR(dentry_page)) {
|
if (IS_ERR(dentry_page)) {
|
||||||
err = PTR_ERR(dentry_page);
|
err = PTR_ERR(dentry_page);
|
||||||
if (err == -ENOENT) {
|
if (err == -ENOENT) {
|
||||||
@ -914,11 +914,11 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
|
|||||||
err = f2fs_fill_dentries(ctx, &d,
|
err = f2fs_fill_dentries(ctx, &d,
|
||||||
n * NR_DENTRY_IN_BLOCK, &fstr);
|
n * NR_DENTRY_IN_BLOCK, &fstr);
|
||||||
if (err) {
|
if (err) {
|
||||||
f2fs_put_page(dentry_page, 1);
|
f2fs_put_page(dentry_page, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
f2fs_put_page(dentry_page, 1);
|
f2fs_put_page(dentry_page, 0);
|
||||||
}
|
}
|
||||||
out_free:
|
out_free:
|
||||||
fscrypt_fname_free_buffer(&fstr);
|
fscrypt_fname_free_buffer(&fstr);
|
||||||
|
Loading…
Reference in New Issue
Block a user