| From 062b217db20a40fc91835619533969a3cb3831c2 Mon Sep 17 00:00:00 2001 |
| From: Miklos Szeredi <mszeredi@redhat.com> |
| Date: Wed, 22 Feb 2017 20:08:25 +0100 |
| Subject: [PATCH] fuse: add missing FR_FORCE |
| |
| commit 2e38bea99a80eab408adee27f873a188d57b76cb upstream. |
| |
| fuse_file_put() was missing the "force" flag for the RELEASE request when |
| sending synchronously (fuseblk). |
| |
| If this flag is not set, then a sync request may be interrupted before it |
| is dequeued by the userspace filesystem. In this case the OPEN won't be |
| balanced with a RELEASE. |
| |
| Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> |
| Fixes: 5a18ec176c93 ("fuse: fix hang of single threaded fuseblk filesystem") |
| Cc: <stable@vger.kernel.org> # v2.6.38+ |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/fuse/file.c b/fs/fuse/file.c |
| index a621dd98a865..cf31fe1b99cc 100644 |
| --- a/fs/fuse/file.c |
| +++ b/fs/fuse/file.c |
| @@ -100,6 +100,7 @@ static void fuse_file_put(struct fuse_file *ff, bool sync) |
| iput(req->misc.release.inode); |
| fuse_put_request(ff->fc, req); |
| } else if (sync) { |
| + __set_bit(FR_FORCE, &req->flags); |
| __clear_bit(FR_BACKGROUND, &req->flags); |
| fuse_request_send(ff->fc, req); |
| iput(req->misc.release.inode); |
| -- |
| 2.12.0 |
| |