• David Howells's avatar
    netfs: Replace PG_fscache by setting folio->private and marking dirty · 2ff1e975
    David Howells authored
    When dirty data is being written to the cache, setting/waiting on/clearing
    the fscache flag is always done in tandem with setting/waiting on/clearing
    the writeback flag.  The netfslib buffered write routines wait on and set
    both flags and the write request cleanup clears both flags, so the fscache
    flag is almost superfluous.
    
    The reason it isn't superfluous is because the fscache flag is also used to
    indicate that data just read from the server is being written to the cache.
    The flag is used to prevent a race involving overlapping direct-I/O writes
    to the cache.
    
    Change this to indicate that a page is in need of being copied to the cache
    by placing a magic value in folio->private and marking the folios dirty.
    Then when the writeback code sees a folio marked in this way, it only
    writes it to the cache and not to the server.
    
    If a folio that has this magic value set is modified, the value is just
    replaced and the folio will then be uplodaded too.
    
    With this, PG_fscache is no longer required by the netfslib core, 9p and
    afs.
    
    Ceph and nfs, however, still need to use the old PG_fscache-based tracking.
    To deal with this, a flag, NETFS_ICTX_USE_PGPRIV2, now has to be set on the
    flags in the netfs_inode struct for those filesystems.  This reenables the
    use of PG_fscache in that inode.  9p and afs use the netfslib write helpers
    so get switched over; cifs, for the moment, does page-by-page manual access
    to the cache, so doesn't use PG_fscache and is unaffected.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    cc: Eric Van Hensbergen <ericvh@kernel.org>
    cc: Latchesar Ionkov <lucho@ionkov.net>
    cc: Dominique Martinet <asmadeus@codewreck.org>
    cc: Christian Schoenebeck <linux_oss@crudebyte.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Ilya Dryomov <idryomov@gmail.com>
    cc: Xiubo Li <xiubli@redhat.com>
    cc: Steve French <sfrench@samba.org>
    cc: Paulo Alcantara <pc@manguebit.com>
    cc: Ronnie Sahlberg <ronniesahlberg@gmail.com>
    cc: Shyam Prasad N <sprasad@microsoft.com>
    cc: Tom Talpey <tom@talpey.com>
    cc: Bharath SM <bharathsm@microsoft.com>
    cc: Trond Myklebust <trond.myklebust@hammerspace.com>
    cc: Anna Schumaker <anna@kernel.org>
    cc: netfs@lists.linux.dev
    cc: v9fs@lists.linux.dev
    cc: linux-afs@lists.infradead.org
    cc: ceph-devel@vger.kernel.org
    cc: linux-cifs@vger.kernel.org
    cc: linux-nfs@vger.kernel.org
    cc: linux-fsdevel@vger.kernel.org
    cc: linux-mm@kvack.org
    2ff1e975
internal.h 11.7 KB