fuse: continue to send FUSE_RELEASEDIR when FUSE_OPEN returns ENOSYS
authorChad Austin <chadaustin@fb.com>
Mon, 10 Dec 2018 18:54:52 +0000 (10:54 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Dec 2018 18:19:51 +0000 (19:19 +0100)
commitd9267e136044854e72c3196179cac63ba4fa4254
treed13bf5d008cccb16c840dd39cc5d73f8796fa2e4
parent113fe99d6376b123e553ff5135d136d3f728b723
fuse: continue to send FUSE_RELEASEDIR when FUSE_OPEN returns ENOSYS

commit 2e64ff154ce6ce9a8dc0f9556463916efa6ff460 upstream.

When FUSE_OPEN returns ENOSYS, the no_open bit is set on the connection.

Because the FUSE_RELEASE and FUSE_RELEASEDIR paths share code, this
incorrectly caused the FUSE_RELEASEDIR request to be dropped and never sent
to userspace.

Pass an isdir bool to distinguish between FUSE_RELEASE and FUSE_RELEASEDIR
inside of fuse_file_put.

Fixes: 7678ac50615d ("fuse: support clients that don't implement 'open'")
Cc: <stable@vger.kernel.org> # v3.14
Signed-off-by: Chad Austin <chadaustin@fb.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/fuse/dir.c
fs/fuse/file.c
fs/fuse/fuse_i.h