On Thu, Oct 03, 2019 at 05:54:35PM +0200, Greg Kroah-Hartman wrote:
static void queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req) {
- spin_lock(&fiq->waitq.lock);
- spin_lock(&fiq->lock); if (test_bit(FR_FINISHED, &req->flags)) {
spin_unlock(&fiq->waitq.lock);
return; } if (list_empty(&req->intr_entry)) { list_add_tail(&req->intr_entry, &fiq->interrupts); wake_up_locked(&fiq->waitq); }spin_unlock(&fiq->lock);
- spin_unlock(&fiq->waitq.lock);
- spin_unlock(&fiq->lock); kill_fasync(&fiq->fasync, SIGIO, POLL_IN);
}
This isn't backported correctly. wake_up_locked() needs to be changed to wake_up().
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index c0d59a86ada2e..6d39143cfa094 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -434,7 +434,7 @@ static void queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req) } if (list_empty(&req->intr_entry)) { list_add_tail(&req->intr_entry, &fiq->interrupts); - wake_up_locked(&fiq->waitq); + wake_up(&fiq->waitq); } spin_unlock(&fiq->lock); kill_fasync(&fiq->fasync, SIGIO, POLL_IN);