Loading fs/fuse/cuse.c +0 −1 Original line number Diff line number Diff line Loading @@ -502,7 +502,6 @@ static int cuse_channel_open(struct inode *inode, struct file *file) INIT_LIST_HEAD(&cc->list); cc->fc.release = cuse_fc_release; cc->fc.connected = 1; cc->fc.initialized = 1; rc = cuse_send_init(cc); if (rc) { Loading fs/fuse/dev.c +10 −9 Original line number Diff line number Diff line Loading @@ -341,7 +341,7 @@ void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget, forget->forget_one.nlookup = nlookup; spin_lock(&fc->lock); if (fc->connected) { if (fiq->connected) { fiq->forget_list_tail->next = forget; fiq->forget_list_tail = forget; wake_up(&fiq->waitq); Loading Loading @@ -471,14 +471,14 @@ static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req) static void __fuse_request_send(struct fuse_conn *fc, struct fuse_req *req) { struct fuse_iqueue *fiq = &fc->iq; BUG_ON(test_bit(FR_BACKGROUND, &req->flags)); spin_lock(&fc->lock); if (!fc->connected) { if (!fiq->connected) { spin_unlock(&fc->lock); req->out.h.error = -ENOTCONN; } else { struct fuse_iqueue *fiq = &fc->iq; req->in.h.unique = fuse_get_unique(fiq); queue_request(fiq, req); /* acquire extra reference, since request is still needed Loading Loading @@ -619,7 +619,7 @@ static int fuse_request_send_notify_reply(struct fuse_conn *fc, __clear_bit(FR_ISREPLY, &req->flags); req->in.h.unique = unique; spin_lock(&fc->lock); if (fc->connected) { if (fiq->connected) { queue_request(fiq, req); err = 0; } Loading Loading @@ -1071,7 +1071,7 @@ __acquires(fc->lock) DECLARE_WAITQUEUE(wait, current); add_wait_queue_exclusive(&fiq->waitq, &wait); while (fc->connected && !request_pending(fiq)) { while (fiq->connected && !request_pending(fiq)) { set_current_state(TASK_INTERRUPTIBLE); if (signal_pending(current)) break; Loading Loading @@ -1261,13 +1261,13 @@ static ssize_t fuse_dev_do_read(struct fuse_conn *fc, struct file *file, restart: spin_lock(&fc->lock); err = -EAGAIN; if ((file->f_flags & O_NONBLOCK) && fc->connected && if ((file->f_flags & O_NONBLOCK) && fiq->connected && !request_pending(fiq)) goto err_unlock; request_wait(fc); err = -ENODEV; if (!fc->connected) if (!fiq->connected) goto err_unlock; err = -ERESTARTSYS; if (!request_pending(fiq)) Loading Loading @@ -2054,7 +2054,7 @@ static unsigned fuse_dev_poll(struct file *file, poll_table *wait) poll_wait(file, &fiq->waitq, wait); spin_lock(&fc->lock); if (!fc->connected) if (!fiq->connected) mask = POLLERR; else if (request_pending(fiq)) mask |= POLLIN | POLLRDNORM; Loading Loading @@ -2127,6 +2127,7 @@ void fuse_abort_conn(struct fuse_conn *fc) LIST_HEAD(to_end2); fc->connected = 0; fiq->connected = 0; fc->blocked = 0; fuse_set_initialized(fc); list_for_each_entry_safe(req, next, &fc->io, list) { Loading fs/fuse/fuse_i.h +3 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,9 @@ struct fuse_req { }; struct fuse_iqueue { /** Connection established */ unsigned connected; /** Readers of the connection are waiting on this */ wait_queue_head_t waitq; Loading fs/fuse/inode.c +2 −1 Original line number Diff line number Diff line Loading @@ -574,6 +574,7 @@ static void fuse_iqueue_init(struct fuse_iqueue *fiq) INIT_LIST_HEAD(&fiq->pending); INIT_LIST_HEAD(&fiq->interrupts); fiq->forget_list_tail = &fiq->forget_list_head; fiq->connected = 1; } void fuse_conn_init(struct fuse_conn *fc) Loading @@ -596,6 +597,7 @@ void fuse_conn_init(struct fuse_conn *fc) fc->polled_files = RB_ROOT; fc->blocked = 0; fc->initialized = 0; fc->connected = 1; fc->attr_version = 1; get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); } Loading Loading @@ -1084,7 +1086,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent) list_add_tail(&fc->entry, &fuse_conn_list); sb->s_root = root_dentry; fc->connected = 1; file->private_data = fuse_conn_get(fc); mutex_unlock(&fuse_mutex); /* Loading Loading
fs/fuse/cuse.c +0 −1 Original line number Diff line number Diff line Loading @@ -502,7 +502,6 @@ static int cuse_channel_open(struct inode *inode, struct file *file) INIT_LIST_HEAD(&cc->list); cc->fc.release = cuse_fc_release; cc->fc.connected = 1; cc->fc.initialized = 1; rc = cuse_send_init(cc); if (rc) { Loading
fs/fuse/dev.c +10 −9 Original line number Diff line number Diff line Loading @@ -341,7 +341,7 @@ void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget, forget->forget_one.nlookup = nlookup; spin_lock(&fc->lock); if (fc->connected) { if (fiq->connected) { fiq->forget_list_tail->next = forget; fiq->forget_list_tail = forget; wake_up(&fiq->waitq); Loading Loading @@ -471,14 +471,14 @@ static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req) static void __fuse_request_send(struct fuse_conn *fc, struct fuse_req *req) { struct fuse_iqueue *fiq = &fc->iq; BUG_ON(test_bit(FR_BACKGROUND, &req->flags)); spin_lock(&fc->lock); if (!fc->connected) { if (!fiq->connected) { spin_unlock(&fc->lock); req->out.h.error = -ENOTCONN; } else { struct fuse_iqueue *fiq = &fc->iq; req->in.h.unique = fuse_get_unique(fiq); queue_request(fiq, req); /* acquire extra reference, since request is still needed Loading Loading @@ -619,7 +619,7 @@ static int fuse_request_send_notify_reply(struct fuse_conn *fc, __clear_bit(FR_ISREPLY, &req->flags); req->in.h.unique = unique; spin_lock(&fc->lock); if (fc->connected) { if (fiq->connected) { queue_request(fiq, req); err = 0; } Loading Loading @@ -1071,7 +1071,7 @@ __acquires(fc->lock) DECLARE_WAITQUEUE(wait, current); add_wait_queue_exclusive(&fiq->waitq, &wait); while (fc->connected && !request_pending(fiq)) { while (fiq->connected && !request_pending(fiq)) { set_current_state(TASK_INTERRUPTIBLE); if (signal_pending(current)) break; Loading Loading @@ -1261,13 +1261,13 @@ static ssize_t fuse_dev_do_read(struct fuse_conn *fc, struct file *file, restart: spin_lock(&fc->lock); err = -EAGAIN; if ((file->f_flags & O_NONBLOCK) && fc->connected && if ((file->f_flags & O_NONBLOCK) && fiq->connected && !request_pending(fiq)) goto err_unlock; request_wait(fc); err = -ENODEV; if (!fc->connected) if (!fiq->connected) goto err_unlock; err = -ERESTARTSYS; if (!request_pending(fiq)) Loading Loading @@ -2054,7 +2054,7 @@ static unsigned fuse_dev_poll(struct file *file, poll_table *wait) poll_wait(file, &fiq->waitq, wait); spin_lock(&fc->lock); if (!fc->connected) if (!fiq->connected) mask = POLLERR; else if (request_pending(fiq)) mask |= POLLIN | POLLRDNORM; Loading Loading @@ -2127,6 +2127,7 @@ void fuse_abort_conn(struct fuse_conn *fc) LIST_HEAD(to_end2); fc->connected = 0; fiq->connected = 0; fc->blocked = 0; fuse_set_initialized(fc); list_for_each_entry_safe(req, next, &fc->io, list) { Loading
fs/fuse/fuse_i.h +3 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,9 @@ struct fuse_req { }; struct fuse_iqueue { /** Connection established */ unsigned connected; /** Readers of the connection are waiting on this */ wait_queue_head_t waitq; Loading
fs/fuse/inode.c +2 −1 Original line number Diff line number Diff line Loading @@ -574,6 +574,7 @@ static void fuse_iqueue_init(struct fuse_iqueue *fiq) INIT_LIST_HEAD(&fiq->pending); INIT_LIST_HEAD(&fiq->interrupts); fiq->forget_list_tail = &fiq->forget_list_head; fiq->connected = 1; } void fuse_conn_init(struct fuse_conn *fc) Loading @@ -596,6 +597,7 @@ void fuse_conn_init(struct fuse_conn *fc) fc->polled_files = RB_ROOT; fc->blocked = 0; fc->initialized = 0; fc->connected = 1; fc->attr_version = 1; get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); } Loading Loading @@ -1084,7 +1086,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent) list_add_tail(&fc->entry, &fuse_conn_list); sb->s_root = root_dentry; fc->connected = 1; file->private_data = fuse_conn_get(fc); mutex_unlock(&fuse_mutex); /* Loading