aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse
diff options
context:
space:
mode:
Diffstat (limited to 'fs/fuse')
-rw-r--r--fs/fuse/dev.c6
-rw-r--r--fs/fuse/fuse_i.h3
-rw-r--r--fs/fuse/inode.c1
3 files changed, 6 insertions, 4 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 609875dbd212..5cd43bf917a4 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -26,7 +26,7 @@ static struct fuse_conn *fuse_get_conn(struct file *file)
26 struct fuse_conn *fc; 26 struct fuse_conn *fc;
27 spin_lock(&fuse_lock); 27 spin_lock(&fuse_lock);
28 fc = file->private_data; 28 fc = file->private_data;
29 if (fc && !fc->mounted) 29 if (fc && !fc->connected)
30 fc = NULL; 30 fc = NULL;
31 spin_unlock(&fuse_lock); 31 spin_unlock(&fuse_lock);
32 return fc; 32 return fc;
@@ -594,7 +594,7 @@ static void request_wait(struct fuse_conn *fc)
594 DECLARE_WAITQUEUE(wait, current); 594 DECLARE_WAITQUEUE(wait, current);
595 595
596 add_wait_queue_exclusive(&fc->waitq, &wait); 596 add_wait_queue_exclusive(&fc->waitq, &wait);
597 while (fc->mounted && list_empty(&fc->pending)) { 597 while (fc->connected && list_empty(&fc->pending)) {
598 set_current_state(TASK_INTERRUPTIBLE); 598 set_current_state(TASK_INTERRUPTIBLE);
599 if (signal_pending(current)) 599 if (signal_pending(current))
600 break; 600 break;
@@ -634,7 +634,7 @@ static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov,
634 goto err_unlock; 634 goto err_unlock;
635 request_wait(fc); 635 request_wait(fc);
636 err = -ENODEV; 636 err = -ENODEV;
637 if (!fc->mounted) 637 if (!fc->connected)
638 goto err_unlock; 638 goto err_unlock;
639 err = -ERESTARTSYS; 639 err = -ERESTARTSYS;
640 if (list_empty(&fc->pending)) 640 if (list_empty(&fc->pending))
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index 5742253164d9..e824a09d3151 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -249,7 +249,8 @@ struct fuse_conn {
249 /** Mount is active */ 249 /** Mount is active */
250 unsigned mounted : 1; 250 unsigned mounted : 1;
251 251
252 /** Connection established */ 252 /** Connection established, cleared on umount and device
253 release */
253 unsigned connected : 1; 254 unsigned connected : 1;
254 255
255 /** Connection failed (version mismatch) */ 256 /** Connection failed (version mismatch) */
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index d7aaffe979dd..d6a09fdaa941 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -200,6 +200,7 @@ static void fuse_put_super(struct super_block *sb)
200 200
201 spin_lock(&fuse_lock); 201 spin_lock(&fuse_lock);
202 fc->mounted = 0; 202 fc->mounted = 0;
203 fc->connected = 0;
203 /* Flush all readers on this fs */ 204 /* Flush all readers on this fs */
204 wake_up_all(&fc->waitq); 205 wake_up_all(&fc->waitq);
205 up_write(&fc->sbput_sem); 206 up_write(&fc->sbput_sem);