• Steve French's avatar
    [CIFS] O_DIRECT opens should work on directio mounts · dca69288
    Steve French authored
    Opens on current cifs/smb2/smb3 mounts with O_DIRECT flag fail
    even when caching is disabled on the mount.  This was
    reported by those running SMB2 benchmarks who need to
    be able to pass O_DIRECT on many of their open calls to
    reduce caching effects, but would also be needed by other
    applications.
    
    When mounting with forcedirectio ("cache=none") cifs and smb2/smb3
    do not go through the page cache and thus opens with O_DIRECT flag
    should work (when posix extensions are negotiated we even are
    able to send the flag to the server). This patch fixes that
    in a simple way.
    
    The 9P client has a similar situation (caching is often disabled)
    and takes the same approach to O_DIRECT support ie works if caching
    disabled, but if client caching enabled it fails with EINVAL.
    
    A followon idea for a future patch as Pavel noted, could
    be that files opened with O_DIRECT could cause us to change
    inode->i_fop on the fly from
    
    cifs_file_strict_ops
    
    to
    
    cifs_file_direct_ops
    
    which would allow us to support this on non-forcedirectio mounts
    (cache=strict and cache=loose) as well.
    Reviewed-by: default avatarPavel Shilovsky <piastry@etersoft.ru>
    Signed-off-by: default avatarSteve French <smfrench@gmail.com>
    dca69288
file.c 95.5 KB