• David Howells's avatar
    netfs: Downgrade i_rwsem for a buffered write · d6a77668
    David Howells authored
    In the I/O locking code borrowed from NFS into netfslib, i_rwsem is held
    locked across a buffered write - but this causes a performance regression
    in cifs as it excludes buffered reads for the duration (cifs didn't use any
    locking for buffered reads).
    
    Mitigate this somewhat by downgrading the i_rwsem to a read lock across the
    buffered write.  This at least allows parallel reads to occur whilst
    excluding other writes, DIO, truncate and setattr.
    
    Note that this shouldn't be a problem for a buffered write as a read
    through an mmap can circumvent i_rwsem anyway.
    
    Also note that we might want to make this change in NFS also.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/1317958.1729096113@warthog.procyon.org.uk
    cc: Steve French <sfrench@samba.org>
    cc: Paulo Alcantara <pc@manguebit.com>
    cc: Trond Myklebust <trondmy@kernel.org>
    cc: Jeff Layton <jlayton@kernel.org>
    cc: netfs@lists.linux.dev
    cc: linux-cifs@vger.kernel.org
    cc: linux-nfs@vger.kernel.org
    cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    d6a77668
locking.c 5.75 KB