2014-12-17 10:01:49

by Miklos Szeredi

[permalink] [raw]
Subject: [GIT PULL] fuse update for 3.19

Hi Linus,

Please pull from:

git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-linus

First part makes sure we don't hold up umount with pending async requests. In
addition to being a cleanup, this is a small behavioral change (for the better)
and unlikely to break anything. Second part prepares for a cleanup of the fuse
device I/O code by adding a helper for simple request submission, with some
savings in line numbers already realized.

Thanks,
Miklos

---
Miklos Szeredi (6):
fuse: don't wake up reserved req in fuse_conn_kill()
fuse: flush requests on umount
fuse: hold inode instead of path after release
fuse: reduce max out args
fuse: introduce fuse_simple_request() helper
fuse: use file_inode() in fuse_file_fallocate()

---
fs/fuse/cuse.c | 2 +-
fs/fuse/dev.c | 29 +++
fs/fuse/dir.c | 538 ++++++++++++++++++++++---------------------------------
fs/fuse/file.c | 230 ++++++++----------------
fs/fuse/fuse_i.h | 45 +++--
fs/fuse/inode.c | 39 +---
6 files changed, 359 insertions(+), 524 deletions(-)


2014-12-17 10:15:12

by Al Viro

[permalink] [raw]
Subject: Re: [GIT PULL] fuse update for 3.19

On Wed, Dec 17, 2014 at 11:02:02AM +0100, Miklos Szeredi wrote:
> Hi Linus,
>
> Please pull from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-linus
>
> First part makes sure we don't hold up umount with pending async requests. In
> addition to being a cleanup, this is a small behavioral change (for the better)
> and unlikely to break anything. Second part prepares for a cleanup of the fuse
> device I/O code by adding a helper for simple request submission, with some
> savings in line numbers already realized.

Umm... Make that igrab(file->f_path.dentry->d_inode) igrab(file_inode(file)),
please. OTOH, that can wait for after merge - it's a trivial followup and
I can take it via vfs.git...

2014-12-17 10:19:22

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [GIT PULL] fuse update for 3.19

On Wed, Dec 17, 2014 at 11:15 AM, Al Viro <[email protected]> wrote:
> On Wed, Dec 17, 2014 at 11:02:02AM +0100, Miklos Szeredi wrote:
>> Hi Linus,
>>
>> Please pull from:
>>
>> git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-linus
>>
>> First part makes sure we don't hold up umount with pending async requests. In
>> addition to being a cleanup, this is a small behavioral change (for the better)
>> and unlikely to break anything. Second part prepares for a cleanup of the fuse
>> device I/O code by adding a helper for simple request submission, with some
>> savings in line numbers already realized.
>
> Umm... Make that igrab(file->f_path.dentry->d_inode) igrab(file_inode(file)),
> please. OTOH, that can wait for after merge - it's a trivial followup and
> I can take it via vfs.git...

Yeah, I spotted that and added a separate patch (the last one in that pull).

Thanks,
Miklos

2014-12-17 10:23:31

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [GIT PULL] fuse update for 3.19

On Wed, Dec 17, 2014 at 11:19 AM, Miklos Szeredi <[email protected]> wrote:
>
> Yeah, I spotted that and added a separate patch (the last one in that pull).

No, sorry, I cock*d up: pushed to for-next, but not to for-linus. Fixed now.

Thanks,
Miklos

2014-12-24 16:53:16

by Marc Dionne

[permalink] [raw]
Subject: Re: [GIT PULL] fuse update for 3.19

On Wed, Dec 17, 2014 at 6:02 AM, Miklos Szeredi <[email protected]> wrote:
> Hi Linus,
>
> Please pull from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-linus
>
> First part makes sure we don't hold up umount with pending async requests. In
> addition to being a cleanup, this is a small behavioral change (for the better)
> and unlikely to break anything. Second part prepares for a cleanup of the fuse
> device I/O code by adding a helper for simple request submission, with some
> savings in line numbers already realized.
>
> Thanks,
> Miklos
>
> ---
> Miklos Szeredi (6):
> fuse: don't wake up reserved req in fuse_conn_kill()
> fuse: flush requests on umount
> fuse: hold inode instead of path after release
> fuse: reduce max out args
> fuse: introduce fuse_simple_request() helper
> fuse: use file_inode() in fuse_file_fallocate()
>

Hi Miklos,

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.

Assuming the analysis makes sense, it wasn't obvious what the best fix
should be.

Thanks,
Marc