• M
    fuse: fix LOOKUP vs INIT compat handling · 21f62174
    Miklos Szeredi 提交于
    Analysis from Marc:
    
     "Commit 7078187a ("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: NMarc Dionne <marc.c.dionne@gmail.com>
    Tested-by: NMarc Dionne <marc.c.dionne@gmail.com>
    Signed-off-by: NMiklos Szeredi <mszeredi@suse.cz>
    Fixes: 7078187a ("fuse: introduce fuse_simple_request() helper")
    21f62174
inode.c 30.3 KB