fuse: serialize dirops by default
Negotiate with userspace filesystems whether they support parallel readdir and lookup. Disable parallelism by default for fear of breaking fuse filesystems. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> Fixes:9902af79c0
("parallel lookups: actual switch to rwsem") Fixes:d9b3dbdcfd
("fuse: switch to ->iterate_shared()")
This commit is contained in:
@@ -341,8 +341,10 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
|
||||
struct dentry *newent;
|
||||
bool outarg_valid = true;
|
||||
|
||||
fuse_lock_inode(dir);
|
||||
err = fuse_lookup_name(dir->i_sb, get_node_id(dir), &entry->d_name,
|
||||
&outarg, &inode);
|
||||
fuse_unlock_inode(dir);
|
||||
if (err == -ENOENT) {
|
||||
outarg_valid = false;
|
||||
err = 0;
|
||||
@@ -1341,7 +1343,9 @@ static int fuse_readdir(struct file *file, struct dir_context *ctx)
|
||||
fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
|
||||
FUSE_READDIR);
|
||||
}
|
||||
fuse_lock_inode(inode);
|
||||
fuse_request_send(fc, req);
|
||||
fuse_unlock_inode(inode);
|
||||
nbytes = req->out.args[0].size;
|
||||
err = req->out.h.error;
|
||||
fuse_put_request(fc, req);
|
||||
|
Reference in New Issue
Block a user