• Linus Torvalds's avatar
    Merge tag 'netfs-lib-20210426' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs · 820c4bae
    Linus Torvalds authored
    Pull network filesystem helper library updates from David Howells:
     "Here's a set of patches for 5.13 to begin the process of overhauling
      the local caching API for network filesystems. This set consists of
      two parts:
    
      (1) Add a helper library to handle the new VM readahead interface.
    
          This is intended to be used unconditionally by the filesystem
          (whether or not caching is enabled) and provides a common
          framework for doing caching, transparent huge pages and, in the
          future, possibly fscrypt and read bandwidth maximisation. It also
          allows the netfs and the cache to align, expand and slice up a
          read request from the VM in various ways; the netfs need only
          provide a function to read a stretch of data to the pagecache and
          the helper takes care of the rest.
    
      (2) Add an alternative fscache/cachfiles I/O API that uses the kiocb
          facility to do async DIO to transfer data to/from the netfs's
          pages, rather than using readpage with wait queue snooping on one
          side and vfs_write() on the other. It also uses less memory, since
          it doesn't do buffered I/O on the backing file.
    
          Note that this uses SEEK_HOLE/SEEK_DATA to locate the data
          available to be read from the cache. Whilst this is an improvement
          from the bmap interface, it still has a problem with regard to a
          modern extent-based filesystem inserting or removing bridging
          blocks of zeros. Fixing that requires a much greater overhaul.
    
      This is a step towards overhauling the fscache API. The change is
      opt-in on the part of the network filesystem. A netfs should not try
      to mix the old and the new API because of conflicting ways of handling
      pages and the PG_fscache page flag and because it would be mixing DIO
      with buffered I/O. Further, the helper library can't be used with the
      old API.
    
      This does not change any of the fscache cookie handling APIs or the
      way invalidation is done at this time.
    
      In the near term, I intend to deprecate and remove the old I/O API
      (fscache_allocate_page{,s}(), fscache_read_or_alloc_page{,s}(),
      fscache_write_page() and fscache_uncache_page()) and eventually
      replace most of fscache/cachefiles with something simpler and easier
      to follow.
    
      This patchset contains the following parts:
    
       - Some helper patches, including provision of an ITER_XARRAY iov
         iterator and a function to do readahead expansion.
    
       - Patches to add the netfs helper library.
    
       - A patch to add the fscache/cachefiles kiocb API.
    
       - A pair of patches to fix some review issues in the ITER_XARRAY and
         read helpers as spotted by Al and Willy.
    
      Jeff Layton has patches to add support in Ceph for this that he
      intends for this merge window. I have a set of patches to support AFS
      that I will post a separate pull request for.
    
      With this, AFS without a cache passes all expected xfstests; with a
      cache, there's an extra failure, but that's also there before these
      patches. Fixing that probably requires a greater overhaul. Ceph also
      passes the expected tests.
    
      I also have patches in a separate branch to tidy up the handling of
      PG_fscache/PG_private_2 and their contribution to page refcounting in
      the core kernel here, but I haven't included them in this set and will
      route them separately"
    
    Link: https://lore.kernel.org/lkml/3779937.1619478404@warthog.procyon.org.uk/
    
    * tag 'netfs-lib-20210426' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs:
      netfs: Miscellaneous fixes
      iov_iter: Four fixes for ITER_XARRAY
      fscache, cachefiles: Add alternate API to use kiocb for read/write to cache
      netfs: Add a tracepoint to log failures that would be otherwise unseen
      netfs: Define an interface to talk to a cache
      netfs: Add write_begin helper
      netfs: Gather stats
      netfs: Add tracepoints
      netfs: Provide readahead and readpage netfs helpers
      netfs, mm: Add set/end/wait_on_page_fscache() aliases
      netfs, mm: Move PG_fscache helper funcs to linux/netfs.h
      netfs: Documentation for helper library
      netfs: Make a netfs helper module
      mm: Implement readahead_control pageset expansion
      mm/readahead: Handle ractl nr_pages being modified
      fs: Document file_ra_state
      mm/filemap: Pass the file_ra_state in the ractl
      mm: Add set/end/wait functions for PG_private_2
      iov_iter: Add ITER_XARRAY
    820c4bae
file.c 105 KB