• S
    [CIFS] Avoid open on possible directories since Samba now rejects them · 8db14ca1
    Steve French 提交于
    Small change (mostly formatting) to limit lookup based open calls to
    file create only.
    
    After discussion yesteday on samba-technical about the posix lookup
    regression,  and looking at a problem with cifs posix open to one
    particular Samba version, Jeff and JRA realized that Samba server's
    behavior changed in this area (posix open behavior on files vs.
    directories).   To make this behavior consistent, JRA just made a
    fix to Samba server to alter how it handles open of directories (now
    returning the equivalent of EISDIR instead of success). Since we don't
    know at lookup time whether the inode is a directory or file (and
    thus whether posix open will succeed with most current Samba server),
    this change avoids the posix open code on lookup open (just issues
    posix open on creates).    This gets the semantic benefits we want
    (atomicity, posix byte range locks, improved write semantics on newly
    created files) and file create still is fast, and we avoid the problem
    that Jeff noticed yesterday with "openat" (and some open directory
    calls) of non-cached directories to one version of Samba server, and
    will work with future Samba versions (which include the fix jra just
    pushed into Samba server).  I confirmed this approach with jra
    yesterday and with Shirish today.
    
    Posix open is only called (at lookup time) for file create now.
    For opens (rather than creates), because we do not know if it
    is a file or directory yet, and current Samba no longer allows
    us to do posix open on dirs, we could end up wasting an open call
    on what turns out to be a dir. For file opens, we wait to call posix
    open till cifs_open.  It could be added here (lookup) in the future
    but the performance tradeoff of the extra network request when EISDIR
    or EACCES is returned would have to be weighed against the 50%
    reduction in network traffic in the other paths.
    Reviewed-by: NShirish Pargaonkar <shirishp@us.ibm.com>
    Tested-by: NJeff Layton <jlayton@redhat.com>
    CC: Jeremy Allison <jra@samba.org>
    Signed-off-by: NSteve French <sfrench@us.ibm.com>
    8db14ca1
dir.c 22.6 KB