提交 c9c9d7df 编写于 作者: M Miklos Szeredi 提交者: Linus Torvalds

fuse: no ENOENT from fuse device read

Don't return -ENOENT for a read() on the fuse device when the request was
aborted.  Instead return -ENODEV, meaning the filesystem has been
force-umounted or aborted.

Previously ENOENT meant that the request was interrupted, but now the
'aborted' flag is not set in case of interrupts.
Signed-off-by: NMiklos Szeredi <mszeredi@suse.cz>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 a131de0a
...@@ -747,11 +747,12 @@ static ssize_t fuse_dev_read(struct kiocb *iocb, const struct iovec *iov, ...@@ -747,11 +747,12 @@ static ssize_t fuse_dev_read(struct kiocb *iocb, const struct iovec *iov,
fuse_copy_finish(&cs); fuse_copy_finish(&cs);
spin_lock(&fc->lock); spin_lock(&fc->lock);
req->locked = 0; req->locked = 0;
if (!err && req->aborted) if (req->aborted) {
err = -ENOENT; request_end(fc, req);
return -ENODEV;
}
if (err) { if (err) {
if (!req->aborted) req->out.h.error = -EIO;
req->out.h.error = -EIO;
request_end(fc, req); request_end(fc, req);
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册