mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
fuse: get rid of ff->readdir.lock
The same protection is provided by file->f_pos_lock.
Note, this relies on the fact that file->f_mode has FMODE_ATOMIC_POS.
This flag is cleared by stream_open(), which would prevent locking of
f_pos_lock.
Prior to commit 7de64d521b
("fuse: break up fuse_open_common()")
FOPEN_STREAM on a directory would cause stream_open() to be called.
After this commit this is not done anymore, so f_pos_lock will always
be locked.
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
efc4105a4c
commit
cdf6ac2a03
@ -69,7 +69,6 @@ struct fuse_file *fuse_file_alloc(struct fuse_mount *fm, bool release)
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&ff->write_entry);
|
||||
mutex_init(&ff->readdir.lock);
|
||||
refcount_set(&ff->count, 1);
|
||||
RB_CLEAR_NODE(&ff->polled_node);
|
||||
init_waitqueue_head(&ff->poll_wait);
|
||||
@ -82,7 +81,6 @@ struct fuse_file *fuse_file_alloc(struct fuse_mount *fm, bool release)
|
||||
void fuse_file_free(struct fuse_file *ff)
|
||||
{
|
||||
kfree(ff->args);
|
||||
mutex_destroy(&ff->readdir.lock);
|
||||
kfree(ff);
|
||||
}
|
||||
|
||||
|
@ -243,12 +243,6 @@ struct fuse_file {
|
||||
|
||||
/* Readdir related */
|
||||
struct {
|
||||
/*
|
||||
* Protects below fields against (crazy) parallel readdir on
|
||||
* same open file. Uncontended in the normal case.
|
||||
*/
|
||||
struct mutex lock;
|
||||
|
||||
/* Dir stream position */
|
||||
loff_t pos;
|
||||
|
||||
|
@ -592,15 +592,11 @@ int fuse_readdir(struct file *file, struct dir_context *ctx)
|
||||
if (fuse_is_bad(inode))
|
||||
return -EIO;
|
||||
|
||||
mutex_lock(&ff->readdir.lock);
|
||||
|
||||
err = UNCACHED;
|
||||
if (ff->open_flags & FOPEN_CACHE_DIR)
|
||||
err = fuse_readdir_cached(file, ctx);
|
||||
if (err == UNCACHED)
|
||||
err = fuse_readdir_uncached(file, ctx);
|
||||
|
||||
mutex_unlock(&ff->readdir.lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user