• David Howells's avatar
    cifs: Fix setting of zero_point after DIO write · 61ea6b3a
    David Howells authored
    At the moment, at the end of a DIO write, cifs calls netfs_resize_file() to
    adjust the size of the file if it needs it.  This will reduce the
    zero_point (the point above which we assume a read will just return zeros)
    if it's more than the new i_size, but won't increase it.
    
    With DIO writes, however, we definitely want to increase it as we have
    clobbered the local pagecache and then written some data that's not
    available locally.
    
    Fix cifs to make the zero_point above the end of a DIO or unbuffered write.
    
    This fixes corruption seen occasionally with the generic/708 xfs-test.  In
    that case, the read-back of some of the written data is being
    short-circuited and replaced with zeroes.
    
    Fixes: 3ee1a1fc ("cifs: Cut over to using netfslib")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarSteve French <sfrench@samba.org>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarPaulo Alcantara (Red Hat) <pc@manguebit.com>
    cc: Jeff Layton <jlayton@kernel.org>
    cc: linux-cifs@vger.kernel.org
    cc: netfs@lists.linux.dev
    cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    61ea6b3a
file.c 86.7 KB