• David Howells's avatar
    netfs: Fix interaction of streaming writes with zero-point tracker · e00e99ba
    David Howells authored
    When a folio that is marked for streaming write (dirty, but not uptodate,
    with partial content specified in the private data) is written back, the
    folio is effectively switched to the blank state upon completion of the
    write.  This means that if we want to read it in future, we need to reread
    the whole folio.
    
    However, if the folio is above the zero_point position, when it is read
    back, it will just be cleared and the read skipped, leading to apparent
    local corruption.
    
    Fix this by increasing the zero_point to the end of the dirty data in the
    folio when clearing the folio state after writeback.  This is analogous to
    the folio having ->release_folio() called upon it.
    
    This was causing the config.log generated by configuring a cpython tree on
    a cifs share to get corrupted because the scripts involved were appending
    text to the file in small pieces.
    
    Fixes: 288ace2f ("netfs: New writeback implementation")
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/563286.1724500613@warthog.procyon.org.uk
    cc: Steve French <sfrench@samba.org>
    cc: Paulo Alcantara <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 avatarChristian Brauner <brauner@kernel.org>
    e00e99ba
write_collect.c 23.8 KB