Loading fs/fuse/dev.c +26 −16 Original line number Diff line number Diff line Loading @@ -276,7 +276,7 @@ static void flush_bg_queue(struct fuse_conn *fc) * Called with fc->lock, unlocks it */ static void request_end(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __releases(fc->lock) { void (*end) (struct fuse_conn *, struct fuse_req *) = req->end; req->end = NULL; Loading Loading @@ -306,8 +306,8 @@ __releases(&fc->lock) static void wait_answer_interruptible(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { if (signal_pending(current)) return; Loading @@ -325,8 +325,8 @@ static void queue_interrupt(struct fuse_conn *fc, struct fuse_req *req) } static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { if (!fc->no_interrupt) { /* Any signal may interrupt this */ Loading Loading @@ -905,8 +905,8 @@ static int request_pending(struct fuse_conn *fc) /* Wait until a request is available on the pending list */ static void request_wait(struct fuse_conn *fc) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { DECLARE_WAITQUEUE(wait, current); Loading Loading @@ -934,7 +934,7 @@ __acquires(&fc->lock) */ static int fuse_read_interrupt(struct fuse_conn *fc, struct fuse_copy_state *cs, size_t nbytes, struct fuse_req *req) __releases(&fc->lock) __releases(fc->lock) { struct fuse_in_header ih; struct fuse_interrupt_in arg; Loading Loading @@ -1720,8 +1720,8 @@ static unsigned fuse_dev_poll(struct file *file, poll_table *wait) * This function releases and reacquires fc->lock */ static void end_requests(struct fuse_conn *fc, struct list_head *head) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { while (!list_empty(head)) { struct fuse_req *req; Loading @@ -1744,8 +1744,8 @@ __acquires(&fc->lock) * locked). */ static void end_io_requests(struct fuse_conn *fc) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { while (!list_empty(&fc->io)) { struct fuse_req *req = Loading @@ -1769,6 +1769,16 @@ __acquires(&fc->lock) } } static void end_queued_requests(struct fuse_conn *fc) __releases(fc->lock) __acquires(fc->lock) { fc->max_background = UINT_MAX; flush_bg_queue(fc); end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); } /* * Abort all requests. * Loading @@ -1795,8 +1805,7 @@ void fuse_abort_conn(struct fuse_conn *fc) fc->connected = 0; fc->blocked = 0; end_io_requests(fc); end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); end_queued_requests(fc); wake_up_all(&fc->waitq); wake_up_all(&fc->blocked_waitq); kill_fasync(&fc->fasync, SIGIO, POLL_IN); Loading @@ -1811,8 +1820,9 @@ int fuse_dev_release(struct inode *inode, struct file *file) if (fc) { spin_lock(&fc->lock); fc->connected = 0; end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); fc->blocked = 0; end_queued_requests(fc); wake_up_all(&fc->blocked_waitq); spin_unlock(&fc->lock); fuse_conn_put(fc); } Loading fs/fuse/file.c +4 −4 Original line number Diff line number Diff line Loading @@ -1144,8 +1144,8 @@ static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) /* Called under fc->lock, may release and reacquire it */ static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { struct fuse_inode *fi = get_fuse_inode(req->inode); loff_t size = i_size_read(req->inode); Loading Loading @@ -1183,8 +1183,8 @@ __acquires(&fc->lock) * Called with fc->lock */ void fuse_flush_writepages(struct inode *inode) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_inode *fi = get_fuse_inode(inode); Loading Loading
fs/fuse/dev.c +26 −16 Original line number Diff line number Diff line Loading @@ -276,7 +276,7 @@ static void flush_bg_queue(struct fuse_conn *fc) * Called with fc->lock, unlocks it */ static void request_end(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __releases(fc->lock) { void (*end) (struct fuse_conn *, struct fuse_req *) = req->end; req->end = NULL; Loading Loading @@ -306,8 +306,8 @@ __releases(&fc->lock) static void wait_answer_interruptible(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { if (signal_pending(current)) return; Loading @@ -325,8 +325,8 @@ static void queue_interrupt(struct fuse_conn *fc, struct fuse_req *req) } static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { if (!fc->no_interrupt) { /* Any signal may interrupt this */ Loading Loading @@ -905,8 +905,8 @@ static int request_pending(struct fuse_conn *fc) /* Wait until a request is available on the pending list */ static void request_wait(struct fuse_conn *fc) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { DECLARE_WAITQUEUE(wait, current); Loading Loading @@ -934,7 +934,7 @@ __acquires(&fc->lock) */ static int fuse_read_interrupt(struct fuse_conn *fc, struct fuse_copy_state *cs, size_t nbytes, struct fuse_req *req) __releases(&fc->lock) __releases(fc->lock) { struct fuse_in_header ih; struct fuse_interrupt_in arg; Loading Loading @@ -1720,8 +1720,8 @@ static unsigned fuse_dev_poll(struct file *file, poll_table *wait) * This function releases and reacquires fc->lock */ static void end_requests(struct fuse_conn *fc, struct list_head *head) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { while (!list_empty(head)) { struct fuse_req *req; Loading @@ -1744,8 +1744,8 @@ __acquires(&fc->lock) * locked). */ static void end_io_requests(struct fuse_conn *fc) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { while (!list_empty(&fc->io)) { struct fuse_req *req = Loading @@ -1769,6 +1769,16 @@ __acquires(&fc->lock) } } static void end_queued_requests(struct fuse_conn *fc) __releases(fc->lock) __acquires(fc->lock) { fc->max_background = UINT_MAX; flush_bg_queue(fc); end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); } /* * Abort all requests. * Loading @@ -1795,8 +1805,7 @@ void fuse_abort_conn(struct fuse_conn *fc) fc->connected = 0; fc->blocked = 0; end_io_requests(fc); end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); end_queued_requests(fc); wake_up_all(&fc->waitq); wake_up_all(&fc->blocked_waitq); kill_fasync(&fc->fasync, SIGIO, POLL_IN); Loading @@ -1811,8 +1820,9 @@ int fuse_dev_release(struct inode *inode, struct file *file) if (fc) { spin_lock(&fc->lock); fc->connected = 0; end_requests(fc, &fc->pending); end_requests(fc, &fc->processing); fc->blocked = 0; end_queued_requests(fc); wake_up_all(&fc->blocked_waitq); spin_unlock(&fc->lock); fuse_conn_put(fc); } Loading
fs/fuse/file.c +4 −4 Original line number Diff line number Diff line Loading @@ -1144,8 +1144,8 @@ static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) /* Called under fc->lock, may release and reacquire it */ static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { struct fuse_inode *fi = get_fuse_inode(req->inode); loff_t size = i_size_read(req->inode); Loading Loading @@ -1183,8 +1183,8 @@ __acquires(&fc->lock) * Called with fc->lock */ void fuse_flush_writepages(struct inode *inode) __releases(&fc->lock) __acquires(&fc->lock) __releases(fc->lock) __acquires(fc->lock) { struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_inode *fi = get_fuse_inode(inode); Loading