From: David Howells <dhowells@redhat.com> To: Trond Myklebust <trondmy@hammerspace.com>, Anna Schumaker <anna.schumaker@netapp.com>, Steve French <sfrench@samba.org>, Dominique Martinet <asmadeus@codewreck.org> Cc: linux-nfs@vger.kernel.org, v9fs-developer@lists.sourceforge.net, Trond Myklebust <trond.myklebust@hammerspace.com>, linux-cachefs@redhat.com, linux-cifs@vger.kernel.org, Shyam Prasad N <nspmangalore@gmail.com>, dhowells@redhat.com, Jeff Layton <jlayton@redhat.com>, Matthew Wilcox <willy@infradead.org>, Alexander Viro <viro@zeniv.linux.org.uk>, Linus Torvalds <torvalds@linux-foundation.org>, linux-cachefs@redhat.com, linux-afs@lists.infradead.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs-developer@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 0/8] fscache: Replace and remove old I/O API Date: Tue, 14 Sep 2021 14:54:36 +0100 [thread overview] Message-ID: <163162767601.438332.9017034724960075707.stgit@warthog.procyon.org.uk> (raw) Here's a set of patches that removes the old fscache I/O API by the following means: (1) A simple fallback API is added that can read or write a single page synchronously. The functions for this have "deprecated" in their names as they have to be removed at some point. (2) An implementation of this is provided in cachefiles. It creates a kiocb to use DIO to the backing file rather than calling readpage on the backing filesystem page and then snooping the page wait queue. (3) NFS is switched to use the fallback API. (4) CIFS is switched to use the fallback API also for the moment. (5) 9P is switched to using netfslib. (6) The old I/O API is removed from fscache and the page snooping implementation is removed from cachefiles. The reasons for doing this are: (A) Using a kiocb to do asynchronous DIO from/to the pages of the backing file is now a possibility that didn't exist when cachefiles was created. This is much simpler than the snooping mechanism with a proper callback path and it also requires fewer copies and less memory. (B) We have to stop using bmap() or SEEK_DATA/SEEK_HOLE to work out what blocks are present in the backing file is dangerous and can lead to data corruption if the backing filesystem can insert or remove blocks of zeros arbitrarily in order to optimise its extent list[1]. Whilst this patchset doesn't fix that yet, it does simplify the code and the fix for that can be made in a subsequent patchset. (C) In order to fix (B), the cache will need to keep track itself of what data is present. To make this easier to manage, the intention is to increase the cache block granularity to, say, 256KiB - importantly, a size that will span multiple pages - which means the single-page interface will have to go away. netfslib is designed to deal with that on behalf of a filesystem, though a filesystem could use raw cache calls instead and manage things itself. These patches can be found also on: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=fscache-iter-3 David Link: https://lore.kernel.org/r/YO17ZNOcq+9PajfQ@mit.edu [1] --- David Howells (8): fscache: Generalise the ->begin_read_operation method fscache: Implement an alternate I/O interface to replace the old API nfs: Move to using the alternate (deprecated) fscache I/O API 9p: (untested) Convert to using the netfs helper lib to do reads and caching cifs: (untested) Move to using the alternate (deprecated) fscache I/O API fscache: Remove the old I/O API fscache: Remove stats that are no longer used fscache: Update the documentation to reflect I/O API changes .../filesystems/caching/backend-api.rst | 138 +-- .../filesystems/caching/netfs-api.rst | 386 +----- fs/9p/Kconfig | 1 + fs/9p/cache.c | 137 --- fs/9p/cache.h | 98 +- fs/9p/v9fs.h | 9 + fs/9p/vfs_addr.c | 174 ++- fs/9p/vfs_file.c | 21 +- fs/cachefiles/Makefile | 1 - fs/cachefiles/interface.c | 15 - fs/cachefiles/internal.h | 38 - fs/cachefiles/io.c | 28 +- fs/cachefiles/main.c | 1 - fs/cachefiles/rdwr.c | 972 --------------- fs/cifs/file.c | 64 +- fs/cifs/fscache.c | 105 +- fs/cifs/fscache.h | 74 +- fs/fscache/cache.c | 6 - fs/fscache/cookie.c | 10 - fs/fscache/internal.h | 58 +- fs/fscache/io.c | 140 ++- fs/fscache/object.c | 2 - fs/fscache/page.c | 1066 ----------------- fs/fscache/stats.c | 73 +- fs/nfs/file.c | 14 +- fs/nfs/fscache-index.c | 26 - fs/nfs/fscache.c | 161 +-- fs/nfs/fscache.h | 84 +- fs/nfs/read.c | 25 +- fs/nfs/write.c | 7 +- include/linux/fscache-cache.h | 131 -- include/linux/fscache.h | 418 ++----- include/linux/netfs.h | 17 +- 33 files changed, 508 insertions(+), 3992 deletions(-) delete mode 100644 fs/cachefiles/rdwr.c
next reply other threads:[~2021-09-14 13:54 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-14 13:54 David Howells [this message] 2021-09-14 13:54 ` [PATCH 1/8] fscache: Generalise the ->begin_read_operation method David Howells 2021-09-14 13:55 ` [PATCH 2/8] fscache: Implement an alternate I/O interface to replace the old API David Howells 2021-09-14 13:55 ` [PATCH 3/8] nfs: Move to using the alternate (deprecated) fscache I/O API David Howells 2021-09-14 13:55 ` [PATCH 4/8] 9p: (untested) Convert to using the netfs helper lib to do reads and caching David Howells 2021-09-14 14:02 ` Jeff Layton 2021-09-14 14:09 ` David Howells 2021-09-14 21:51 ` Dominique Martinet 2021-09-14 21:59 ` David Howells 2021-09-21 11:15 ` Dominique Martinet 2021-09-14 13:55 ` [PATCH 5/8] cifs: (untested) Move to using the alternate (deprecated) fscache I/O API David Howells 2021-09-14 13:55 ` [PATCH 6/8] fscache: Remove the old " David Howells 2021-09-14 13:56 ` [PATCH 7/8] fscache: Remove stats that are no longer used David Howells 2021-09-14 13:56 ` [PATCH 8/8] fscache: Update the documentation to reflect I/O API changes David Howells 2021-09-14 15:30 ` [RFC PATCH 0/8] fscache: Replace and remove old I/O API David Wysochanski 2021-09-20 12:54 ` David Wysochanski 2021-09-14 15:49 ` Jeff Layton 2021-09-14 16:21 ` Linus Torvalds 2021-09-14 16:24 ` Linus Torvalds 2021-09-14 18:59 ` David Howells
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=163162767601.438332.9017034724960075707.stgit@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=anna.schumaker@netapp.com \ --cc=asmadeus@codewreck.org \ --cc=ceph-devel@vger.kernel.org \ --cc=jlayton@redhat.com \ --cc=linux-afs@lists.infradead.org \ --cc=linux-cachefs@redhat.com \ --cc=linux-cifs@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nfs@vger.kernel.org \ --cc=nspmangalore@gmail.com \ --cc=sfrench@samba.org \ --cc=torvalds@linux-foundation.org \ --cc=trond.myklebust@hammerspace.com \ --cc=trondmy@hammerspace.com \ --cc=v9fs-developer@lists.sourceforge.net \ --cc=viro@zeniv.linux.org.uk \ --cc=willy@infradead.org \ --subject='Re: [RFC PATCH 0/8] fscache: Replace and remove old I/O API' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).