diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2015-01-06 10:45:35 +0100 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2015-01-06 10:45:35 +0100 |
commit | 21f621741a770c119e7529a3f5c0e6b7c91383a3 (patch) | |
tree | 4393194807e351d0c2922673d44409a656a87259 /mm/util.c | |
parent | Linux 3.19-rc3 (diff) | |
download | linux-21f621741a770c119e7529a3f5c0e6b7c91383a3.tar.xz linux-21f621741a770c119e7529a3f5c0e6b7c91383a3.zip |
fuse: fix LOOKUP vs INIT compat handling
Analysis from Marc:
"Commit 7078187a795f ("fuse: introduce fuse_simple_request() helper")
from the above pull request triggers some EIO errors for me in some tests
that rely on fuse
Looking at the code changes and a bit of debugging info I think there's a
general problem here that fuse_get_req checks and possibly waits for
fc->initialized, and this was always called first. But this commit
changes the ordering and in many places fc->minor is now possibly used
before fuse_get_req, and we can't be sure that fc has been initialized.
In my case fuse_lookup_init sets req->out.args[0].size to the wrong size
because fc->minor at that point is still 0, leading to the EIO error."
Fix by moving the compat adjustments into fuse_simple_request() to after
fuse_get_req().
This is also more readable than the original, since now compatibility is
handled in a single function instead of cluttering each operation.
Reported-by: Marc Dionne <marc.c.dionne@gmail.com>
Tested-by: Marc Dionne <marc.c.dionne@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Fixes: 7078187a795f ("fuse: introduce fuse_simple_request() helper")
Diffstat (limited to 'mm/util.c')
0 files changed, 0 insertions, 0 deletions