summaryrefslogtreecommitdiffstats
path: root/fs/fuse/inode.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:26:09 +0200
committerMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:26:09 +0200
commitc3696046beb3a4479715b48f67f6a8a3aef4b3bb (patch)
tree74fff1d57b1b7e0270dbf7ca89b964bf69402e51 /fs/fuse/inode.c
parentcc080e9e9be16ccf26135d366d7d2b65209f1d56 (diff)
downloadlinux-stable-c3696046beb3a4479715b48f67f6a8a3aef4b3bb.tar.gz
linux-stable-c3696046beb3a4479715b48f67f6a8a3aef4b3bb.tar.bz2
linux-stable-c3696046beb3a4479715b48f67f6a8a3aef4b3bb.zip
fuse: separate pqueue for clones
Make each fuse device clone refer to a separate processing queue. The only constraint on userspace code is that the request answer must be written to the same device clone as it was read off. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Diffstat (limited to 'fs/fuse/inode.c')
-rw-r--r--fs/fuse/inode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index e399383d87c8..ac81f48ab2f4 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -592,10 +592,10 @@ void fuse_conn_init(struct fuse_conn *fc)
spin_lock_init(&fc->lock);
init_rwsem(&fc->killsb);
atomic_set(&fc->count, 1);
+ atomic_set(&fc->dev_count, 1);
init_waitqueue_head(&fc->blocked_waitq);
init_waitqueue_head(&fc->reserved_req_waitq);
fuse_iqueue_init(&fc->iq);
- fuse_pqueue_init(&fc->pq);
INIT_LIST_HEAD(&fc->bg_queue);
INIT_LIST_HEAD(&fc->entry);
INIT_LIST_HEAD(&fc->devices);
@@ -999,6 +999,7 @@ struct fuse_dev *fuse_dev_alloc(struct fuse_conn *fc)
fud = kzalloc(sizeof(struct fuse_dev), GFP_KERNEL);
if (fud) {
fud->fc = fuse_conn_get(fc);
+ fuse_pqueue_init(&fud->pq);
spin_lock(&fc->lock);
list_add_tail(&fud->entry, &fc->devices);