1. 10 Jan, 2022 1 commit
    • David Howells's avatar
      9p: Use fscache indexing rewrite and reenable caching · 24e42e32
      David Howells authored
      Change the 9p filesystem to take account of the changes to fscache's
      indexing rewrite and reenable caching in 9p.
      
      The following changes have been made:
      
       (1) The fscache_netfs struct is no more, and there's no need to register
           the filesystem as a whole.
      
       (2) The session cookie is now an fscache_volume cookie, allocated with
           fscache_acquire_volume().  That takes three parameters: a string
           representing the "volume" in the index, a string naming the cache to
           use (or NULL) and a u64 that conveys coherency metadata for the
           volume.
      
           For 9p, I've made it render the volume name string as:
      
      	"9p,<devname>,<cachetag>"
      
           where the cachetag is replaced by the aname if it wasn't supplied.
      
           This probably needs rethinking a bit as the aname can have slashes in
           it.  It might be better to hash the cachetag and use the hash or I
           could substitute commas for the slashes or something.
      
       (3) The fscache_cookie_def is no more and needed information is passed
           directly to fscache_acquire_cookie().  The cache no longer calls back
           into the filesystem, but rather metadata changes are indicated at
           other times.
      
           fscache_acquire_cookie() is passed the same keying and coherency
           information as before.
      
       (4) The functions to set/reset/flush cookies are removed and
           fscache_use_cookie() and fscache_unuse_cookie() are used instead.
      
           fscache_use_cookie() is passed a flag to indicate if the cookie is
           opened for writing.  fscache_unuse_cookie() is passed updates for the
           metadata if we changed it (ie. if the file was opened for writing).
      
           These are called when the file is opened or closed.
      
       (5) wait_on_page_bit[_killable]() is replaced with the specific wait
           functions for the bits waited upon.
      
       (6) I've got rid of some of the 9p-specific cache helper functions and
           called things like fscache_relinquish_cookie() directly as they'll
           optimise away if v9fs_inode_cookie() returns an unconditional NULL
           (which will be the case if CONFIG_9P_FSCACHE=n).
      
       (7) v9fs_vfs_setattr() is made to call fscache_resize() to change the size
           of the cache object.
      
      Notes:
      
       (A) We should call fscache_invalidate() if we detect that the server's
           copy of a file got changed by a third party, but I don't know where to
           do that.  We don't need to do that when allocating the cookie as we
           get a check-and-invalidate when we initially bind to the cache object.
      
       (B) The copy-to-cache-on-writeback side of things will be handled in
           separate patch.
      
      Changes
      =======
      ver #3:
       - Canonicalise the cookie key and coherency data to make them
         endianness-independent.
      
      ver #2:
       - Use gfpflags_allow_blocking() rather than using flag directly.
       - fscache_acquire_volume() now returns errors.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Acked-by: default avatarJeff Layton <jlayton@kernel.org>
      Tested-by: default avatarDominique Martinet <asmadeus@codewreck.org>
      cc: Eric Van Hensbergen <ericvh@gmail.com>
      cc: Latchesar Ionkov <lucho@ionkov.net>
      cc: v9fs-developer@lists.sourceforge.net
      cc: linux-cachefs@redhat.com
      Link: https://lore.kernel.org/r/163819664645.215744.1555314582005286846.stgit@warthog.procyon.org.uk/ # v1
      Link: https://lore.kernel.org/r/163906975017.143852.3459573173204394039.stgit@warthog.procyon.org.uk/ # v2
      Link: https://lore.kernel.org/r/163967178512.1823006.17377493641569138183.stgit@warthog.procyon.org.uk/ # v3
      Link: https://lore.kernel.org/r/164021573143.640689.3977487095697717967.stgit@warthog.procyon.org.uk/ # v4
      24e42e32
  2. 07 Jan, 2022 39 commits