From: David Howells <dhowells@redhat.com> To: Trond Myklebust <trondmy@hammerspace.com>, Anna Schumaker <anna.schumaker@netapp.com>, Steve French <sfrench@samba.org>, Jeff Layton <jlayton@redhat.com> Cc: Matthew Wilcox <willy@infradead.org>, dhowells@redhat.com, Matthew Wilcox <willy@infradead.org>, Alexander Viro <viro@zeniv.linux.org.uk>, 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 00/61] fscache, cachefiles: Rewrite the I/O interface in terms of kiocb/iov_iter Date: Mon, 04 May 2020 18:07:16 +0100 [thread overview] Message-ID: <158861203563.340223.7585359869938129395.stgit@warthog.procyon.org.uk> (raw) Here's a set of patches that massively overhauls the object lifecycle management and the I/O API of the local caching for network filesystems code for a reduction of about 3000 LoC and a 1000 line Documentation reduction. The ability to use async DIO to pass data to/from the cache gives a huge speed bonus and uses less memory. So far, only AFS has been ported to use this. This series disabled fscache support in all other filesystems that use it. I'm working on NFS, but it's tricky and I could use some help. The following parts have been removed: - The object state machine - The I/O operation manager - All non-transient references from fscache to the netfs's data - All non-transient callbacks from fscache to the netfs - The backing page I/O monitoring - The tracking of netfs pages that fscache knows about - The tracking of netfs pages that need writing to the cache - The use of bmap to work out if a page is stored in the cache - The copy of data to/from backing pages to netfs pages. Instead, the I/O to the cache is driven much more from the netfs. There are a number of aspects to the I/O API: (1) The lowest level I/O primitives just take an iov_iter and start async DIO on the cache objects. The caller gets a callback upon completion. The PG_fscache bit is now just used to indicate that there's a write to the cache in progress. The cache will keep track in xattrs as to what areas of the backing file are occupied. - struct fscache_io_request - fscache_read() and fscache_write(). (2) The cache may require that the I/O fulfil certain alignment and length granularity constraints. This, and whether the cache contains the desired data, can be queried. - struct fscache_extent - fscache_shape_extent() (3) The cookie that's obtained when an inode is set up must be 'used' when a file is opened (with an indication as to whether it might be modified) and 'unused' when it is done with. At the point of unuse, the auxdata and file size can be specified. - fscache_use_cookie(), fscache_unuse_cookie() (4) The cookie can be invalidated at any time, and new auxiliary data and a new size provided. Any in-progress I/O will either cause new I/O to wait, or a replacement tmpfile will be created and the in-progress I/O will just be abandoned. The on-disk auxdata (in xattrs, say) are updated lazily. - fscache_invalidate() (5) A helper API for reads is provided to combine the (1), (2) above and read_cache_pages() and also do read-(re)issue to the network in the case that the data isn't present or the cache fails. This requires that an operation descriptor be allocated and given some operations. This needs to be used for ->readpage(), ->readpages() and prefetching for ->write_begin(). - struct fscache_io_request - fscache_read_helper() I've also simplified the cookie management API to remove struct fscache_cookie_def. Instead, the pertinent details are supplied when a cookie is created and the file size, key and auxdata are stored in the cookie. Callbacks and backpointers are simply removed. I've added some pieces outside of the API also: (1) An inode flag to mark a backing cachefile as being in use by the kernel. This prevents multiple caches mounted in the same directory from fighting over the same files. It can also be extended to exclude other kernel users (such as swap) and could also be used to prevent userspace interfering with the file. (2) A new I/O iterator class, ITER_MAPPING, that iterates over the specified byte range of a mapping. The caller is required to make sure that the pages don't evaporate under the callee (eg. pinning them by PG_locked, PG_writeback, PG_fscache or usage count). It may make sense to make this more generic and just take an xarray that is known to be laden with pages. The one tricky bit there is that the iteration routines call find_get_page_contig() - though the only thing the mapping is used for is to find the xarray containing the pages. This is better than an ITER_BVEC as no allocation of bio_vec structs is required since the xarray holds pointers to all the pages involved. (3) Wait and unlock functions for PG_fscache. These are in the core, so no need to call into fscache for it. So, to be done hopefully before the next merge window: (1) Handling CONFIG_FSCACHE=n. fscache_read_helper() is a bit intrusive, since it acts as the middle manager for switching between reading from the cache and reading from the network. I need a no-fscache version as well. Possibly a chunk of this can/will get absorbed into the VM, since the request shaping conflicts with the readahead code. Especially with Matthew Wilcox intending to rewrite the VM interface. (2) Need to investigate whether I need to be lazy, but only to an extent, about closing up backing files. (3) Make NFS, CIFS, Ceph, 9P work with it. I'm hoping that Jeff Layton will do Ceph. As mentioned, I'm having a crack at NFS, but it's evolved a bit since I last looked at it and it might be easier if I can palm that off to someone more current in the NFS I/O code. And beyond that: (4) Put in support for versioned monolithic objects (eg. AFS directories). (5) Currently it cachefiles only caches large files up to 1GiB. File data beyond that isn't cached. The problem here is that I'm using an xattr to hold the content map, and xattrs may be limited in size and I've limited myself to using a 512 byte xattr. I can easily make it cache a non-sparse file of any size with no map, but as soon as it becomes sparse, I need a different strategy. (6) Change the indexing strategy so that the culling mechanism is brought into the kernel, rather than doing that in userspace, and use an index table of files with a LRU list. These patches can be found also on: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=fscache-iter David --- David Howells (61): afs: Make afs_zap_data() static iov_iter: Add ITER_MAPPING vm: Add wait/unlock functions for PG_fscache vfs: Export rw_verify_area() for use by cachefiles vfs: Provide S_CACHE_FILE inode flag afs: Disable use of the fscache I/O routines fscache: Add a cookie debug ID and use that in traces fscache: Procfile to display cookies fscache: Temporarily disable network filesystems' use of fscache fscache: Remove the old I/O API fscache: Remove the netfs data from the cookie fscache: Remove struct fscache_cookie_def fscache: Remove store_limit* from struct fscache_object fscache: Remove fscache_check_consistency() fscache: Remove fscache_attr_changed() fscache: Remove obsolete stats fscache: Remove old I/O tracepoints fscache: Temporarily disable fscache_invalidate() fscache: Remove the I/O operation manager cachefiles: Remove tree of active files and use S_CACHE_FILE inode flag fscache: Provide a simple thread pool for running ops asynchronously fscache: Replace the object management state machine fscache: Rewrite the I/O API based on iov_iter fscache: Remove fscache_wait_on_invalidate() fscache: Keep track of size of a file last set independently on the server fscache, cachefiles: Fix disabled histogram warnings fscache: Recast assertion in terms of cookie not being an index cachefiles: Remove some redundant checks on unsigned values cachefiles: trace: Log coherency checks cachefiles: Split cachefiles_drop_object() up a bit cachefiles: Implement new fscache I/O backend API cachefiles: Merge object->backer into object->dentry cachefiles: Implement a content-present indicator and bitmap cachefiles: Implement extent shaper cachefiles: Round the cachefile size up to DIO block size cachefiles: Implement read and write parts of new I/O API cachefiles: Add I/O tracepoints fscache: Add read helper fscache: Display cache-specific data in /proc/fs/fscache/objects fscache: Remove more obsolete stats fscache: New stats fscache, cachefiles: Rewrite invalidation fscache: Implement "will_modify" parameter on fscache_use_cookie() fscache: Provide resize operation fscache: Remove the update operation cachefiles: Shape write requests afs: Remove afs_zero_fid as it's not used afs: Move key to afs_read struct afs: Don't truncate iter during data fetch afs: Set up the iov_iter before calling afs_extract_data() afs: Use ITER_MAPPING for writing afs: Interpose struct fscache_io_request into struct afs_read afs: Note the amount transferred in fetch-data delivery afs: Wait on PG_fscache before modifying/releasing a page afs: Use new fscache I/O API afs: Copy local writes to the cache when writing to the server afs: Invoke fscache_resize_cookie() when handling ATTR_SIZE for setattr fscache: Rewrite the main document fscache: Remove the obsolete API bits from the documentation fscache: Document the new netfs API fscache: Document the rewritten cache backend API Documentation/filesystems/caching/backend-api.txt | 520 ++------- Documentation/filesystems/caching/fscache.txt | 51 - Documentation/filesystems/caching/netfs-api.txt | 926 ++++++---------- Documentation/filesystems/caching/object.txt | 240 ---- Documentation/filesystems/caching/operations.txt | 213 ---- fs/9p/Kconfig | 2 fs/afs/cache.c | 54 - fs/afs/cell.c | 9 fs/afs/dir.c | 242 +++- fs/afs/file.c | 558 ++++----- fs/afs/fsclient.c | 127 +- fs/afs/inode.c | 45 - fs/afs/internal.h | 64 + fs/afs/rxrpc.c | 112 -- fs/afs/volume.c | 9 fs/afs/write.c | 306 +++-- fs/afs/yfsclient.c | 99 +- fs/cachefiles/Makefile | 3 fs/cachefiles/bind.c | 11 fs/cachefiles/content-map.c | 489 ++++++++ fs/cachefiles/daemon.c | 10 fs/cachefiles/interface.c | 558 +++++---- fs/cachefiles/internal.h | 140 +- fs/cachefiles/io.c | 279 +++++ fs/cachefiles/main.c | 12 fs/cachefiles/namei.c | 506 +++------ fs/cachefiles/rdwr.c | 974 ---------------- fs/cachefiles/xattr.c | 263 ++-- fs/ceph/Kconfig | 2 fs/cifs/Kconfig | 2 fs/fscache/Kconfig | 4 fs/fscache/Makefile | 8 fs/fscache/cache.c | 136 +- fs/fscache/cookie.c | 768 +++++-------- fs/fscache/dispatcher.c | 150 +++ fs/fscache/fsdef.c | 56 - fs/fscache/histogram.c | 2 fs/fscache/internal.h | 254 +--- fs/fscache/io.c | 204 +++ fs/fscache/main.c | 34 - fs/fscache/netfs.c | 10 fs/fscache/obj.c | 343 ++++++ fs/fscache/object-list.c | 129 -- fs/fscache/object.c | 1133 ------------------- fs/fscache/object_bits.c | 120 ++ fs/fscache/operation.c | 633 ----------- fs/fscache/page.c | 1248 --------------------- fs/fscache/proc.c | 13 fs/fscache/read_helper.c | 580 ++++++++++ fs/fscache/stats.c | 251 +--- fs/internal.h | 5 fs/nfs/Kconfig | 2 fs/nfs/fscache-index.c | 4 fs/read_write.c | 1 include/linux/fs.h | 2 include/linux/fscache-cache.h | 507 ++------- include/linux/fscache-obsolete.h | 13 include/linux/fscache.h | 784 +++++-------- include/linux/pagemap.h | 14 include/linux/uio.h | 11 include/net/af_rxrpc.h | 2 include/trace/events/afs.h | 51 - include/trace/events/cachefiles.h | 285 ++++- include/trace/events/fscache.h | 439 +------ lib/iov_iter.c | 280 ++++- mm/filemap.c | 18 net/rxrpc/recvmsg.c | 9 67 files changed, 5655 insertions(+), 9674 deletions(-) delete mode 100644 Documentation/filesystems/caching/operations.txt create mode 100644 fs/cachefiles/content-map.c create mode 100644 fs/cachefiles/io.c delete mode 100644 fs/cachefiles/rdwr.c create mode 100644 fs/fscache/dispatcher.c create mode 100644 fs/fscache/io.c create mode 100644 fs/fscache/obj.c delete mode 100644 fs/fscache/object.c create mode 100644 fs/fscache/object_bits.c delete mode 100644 fs/fscache/operation.c delete mode 100644 fs/fscache/page.c create mode 100644 fs/fscache/read_helper.c create mode 100644 include/linux/fscache-obsolete.h
WARNING: multiple messages have this Message-ID (diff)
From: David Howells <dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> To: Trond Myklebust <trondmy-F/q8l9xzQnoyLce1RVWEUA@public.gmane.org>, Anna Schumaker <anna.schumaker-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org>, Steve French <sfrench-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>, Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Cc: Matthew Wilcox <willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.orgMatthew Wilcox <willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Alexander Viro <viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org>, linux-afs-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, v9fs-developer-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [RFC PATCH 00/61] fscache, cachefiles: Rewrite the I/O interface in terms of kiocb/iov_iter Date: Mon, 04 May 2020 18:07:16 +0100 [thread overview] Message-ID: <158861203563.340223.7585359869938129395.stgit@warthog.procyon.org.uk> (raw) Here's a set of patches that massively overhauls the object lifecycle management and the I/O API of the local caching for network filesystems code for a reduction of about 3000 LoC and a 1000 line Documentation reduction. The ability to use async DIO to pass data to/from the cache gives a huge speed bonus and uses less memory. So far, only AFS has been ported to use this. This series disabled fscache support in all other filesystems that use it. I'm working on NFS, but it's tricky and I could use some help. The following parts have been removed: - The object state machine - The I/O operation manager - All non-transient references from fscache to the netfs's data - All non-transient callbacks from fscache to the netfs - The backing page I/O monitoring - The tracking of netfs pages that fscache knows about - The tracking of netfs pages that need writing to the cache - The use of bmap to work out if a page is stored in the cache - The copy of data to/from backing pages to netfs pages. Instead, the I/O to the cache is driven much more from the netfs. There are a number of aspects to the I/O API: (1) The lowest level I/O primitives just take an iov_iter and start async DIO on the cache objects. The caller gets a callback upon completion. The PG_fscache bit is now just used to indicate that there's a write to the cache in progress. The cache will keep track in xattrs as to what areas of the backing file are occupied. - struct fscache_io_request - fscache_read() and fscache_write(). (2) The cache may require that the I/O fulfil certain alignment and length granularity constraints. This, and whether the cache contains the desired data, can be queried. - struct fscache_extent - fscache_shape_extent() (3) The cookie that's obtained when an inode is set up must be 'used' when a file is opened (with an indication as to whether it might be modified) and 'unused' when it is done with. At the point of unuse, the auxdata and file size can be specified. - fscache_use_cookie(), fscache_unuse_cookie() (4) The cookie can be invalidated at any time, and new auxiliary data and a new size provided. Any in-progress I/O will either cause new I/O to wait, or a replacement tmpfile will be created and the in-progress I/O will just be abandoned. The on-disk auxdata (in xattrs, say) are updated lazily. - fscache_invalidate() (5) A helper API for reads is provided to combine the (1), (2) above and read_cache_pages() and also do read-(re)issue to the network in the case that the data isn't present or the cache fails. This requires that an operation descriptor be allocated and given some operations. This needs to be used for ->readpage(), ->readpages() and prefetching for ->write_begin(). - struct fscache_io_request - fscache_read_helper() I've also simplified the cookie management API to remove struct fscache_cookie_def. Instead, the pertinent details are supplied when a cookie is created and the file size, key and auxdata are stored in the cookie. Callbacks and backpointers are simply removed. I've added some pieces outside of the API also: (1) An inode flag to mark a backing cachefile as being in use by the kernel. This prevents multiple caches mounted in the same directory from fighting over the same files. It can also be extended to exclude other kernel users (such as swap) and could also be used to prevent userspace interfering with the file. (2) A new I/O iterator class, ITER_MAPPING, that iterates over the specified byte range of a mapping. The caller is required to make sure that the pages don't evaporate under the callee (eg. pinning them by PG_locked, PG_writeback, PG_fscache or usage count). It may make sense to make this more generic and just take an xarray that is known to be laden with pages. The one tricky bit there is that the iteration routines call find_get_page_contig() - though the only thing the mapping is used for is to find the xarray containing the pages. This is better than an ITER_BVEC as no allocation of bio_vec structs is required since the xarray holds pointers to all the pages involved. (3) Wait and unlock functions for PG_fscache. These are in the core, so no need to call into fscache for it. So, to be done hopefully before the next merge window: (1) Handling CONFIG_FSCACHE=n. fscache_read_helper() is a bit intrusive, since it acts as the middle manager for switching between reading from the cache and reading from the network. I need a no-fscache version as well. Possibly a chunk of this can/will get absorbed into the VM, since the request shaping conflicts with the readahead code. Especially with Matthew Wilcox intending to rewrite the VM interface. (2) Need to investigate whether I need to be lazy, but only to an extent, about closing up backing files. (3) Make NFS, CIFS, Ceph, 9P work with it. I'm hoping that Jeff Layton will do Ceph. As mentioned, I'm having a crack at NFS, but it's evolved a bit since I last looked at it and it might be easier if I can palm that off to someone more current in the NFS I/O code. And beyond that: (4) Put in support for versioned monolithic objects (eg. AFS directories). (5) Currently it cachefiles only caches large files up to 1GiB. File data beyond that isn't cached. The problem here is that I'm using an xattr to hold the content map, and xattrs may be limited in size and I've limited myself to using a 512 byte xattr. I can easily make it cache a non-sparse file of any size with no map, but as soon as it becomes sparse, I need a different strategy. (6) Change the indexing strategy so that the culling mechanism is brought into the kernel, rather than doing that in userspace, and use an index table of files with a LRU list. These patches can be found also on: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=fscache-iter David --- David Howells (61): afs: Make afs_zap_data() static iov_iter: Add ITER_MAPPING vm: Add wait/unlock functions for PG_fscache vfs: Export rw_verify_area() for use by cachefiles vfs: Provide S_CACHE_FILE inode flag afs: Disable use of the fscache I/O routines fscache: Add a cookie debug ID and use that in traces fscache: Procfile to display cookies fscache: Temporarily disable network filesystems' use of fscache fscache: Remove the old I/O API fscache: Remove the netfs data from the cookie fscache: Remove struct fscache_cookie_def fscache: Remove store_limit* from struct fscache_object fscache: Remove fscache_check_consistency() fscache: Remove fscache_attr_changed() fscache: Remove obsolete stats fscache: Remove old I/O tracepoints fscache: Temporarily disable fscache_invalidate() fscache: Remove the I/O operation manager cachefiles: Remove tree of active files and use S_CACHE_FILE inode flag fscache: Provide a simple thread pool for running ops asynchronously fscache: Replace the object management state machine fscache: Rewrite the I/O API based on iov_iter fscache: Remove fscache_wait_on_invalidate() fscache: Keep track of size of a file last set independently on the server fscache, cachefiles: Fix disabled histogram warnings fscache: Recast assertion in terms of cookie not being an index cachefiles: Remove some redundant checks on unsigned values cachefiles: trace: Log coherency checks cachefiles: Split cachefiles_drop_object() up a bit cachefiles: Implement new fscache I/O backend API cachefiles: Merge object->backer into object->dentry cachefiles: Implement a content-present indicator and bitmap cachefiles: Implement extent shaper cachefiles: Round the cachefile size up to DIO block size cachefiles: Implement read and write parts of new I/O API cachefiles: Add I/O tracepoints fscache: Add read helper fscache: Display cache-specific data in /proc/fs/fscache/objects fscache: Remove more obsolete stats fscache: New stats fscache, cachefiles: Rewrite invalidation fscache: Implement "will_modify" parameter on fscache_use_cookie() fscache: Provide resize operation fscache: Remove the update operation cachefiles: Shape write requests afs: Remove afs_zero_fid as it's not used afs: Move key to afs_read struct afs: Don't truncate iter during data fetch afs: Set up the iov_iter before calling afs_extract_data() afs: Use ITER_MAPPING for writing afs: Interpose struct fscache_io_request into struct afs_read afs: Note the amount transferred in fetch-data delivery afs: Wait on PG_fscache before modifying/releasing a page afs: Use new fscache I/O API afs: Copy local writes to the cache when writing to the server afs: Invoke fscache_resize_cookie() when handling ATTR_SIZE for setattr fscache: Rewrite the main document fscache: Remove the obsolete API bits from the documentation fscache: Document the new netfs API fscache: Document the rewritten cache backend API Documentation/filesystems/caching/backend-api.txt | 520 ++------- Documentation/filesystems/caching/fscache.txt | 51 - Documentation/filesystems/caching/netfs-api.txt | 926 ++++++---------- Documentation/filesystems/caching/object.txt | 240 ---- Documentation/filesystems/caching/operations.txt | 213 ---- fs/9p/Kconfig | 2 fs/afs/cache.c | 54 - fs/afs/cell.c | 9 fs/afs/dir.c | 242 +++- fs/afs/file.c | 558 ++++----- fs/afs/fsclient.c | 127 +- fs/afs/inode.c | 45 - fs/afs/internal.h | 64 + fs/afs/rxrpc.c | 112 -- fs/afs/volume.c | 9 fs/afs/write.c | 306 +++-- fs/afs/yfsclient.c | 99 +- fs/cachefiles/Makefile | 3 fs/cachefiles/bind.c | 11 fs/cachefiles/content-map.c | 489 ++++++++ fs/cachefiles/daemon.c | 10 fs/cachefiles/interface.c | 558 +++++---- fs/cachefiles/internal.h | 140 +- fs/cachefiles/io.c | 279 +++++ fs/cachefiles/main.c | 12 fs/cachefiles/namei.c | 506 +++------ fs/cachefiles/rdwr.c | 974 ---------------- fs/cachefiles/xattr.c | 263 ++-- fs/ceph/Kconfig | 2 fs/cifs/Kconfig | 2 fs/fscache/Kconfig | 4 fs/fscache/Makefile | 8 fs/fscache/cache.c | 136 +- fs/fscache/cookie.c | 768 +++++-------- fs/fscache/dispatcher.c | 150 +++ fs/fscache/fsdef.c | 56 - fs/fscache/histogram.c | 2 fs/fscache/internal.h | 254 +--- fs/fscache/io.c | 204 +++ fs/fscache/main.c | 34 - fs/fscache/netfs.c | 10 fs/fscache/obj.c | 343 ++++++ fs/fscache/object-list.c | 129 -- fs/fscache/object.c | 1133 ------------------- fs/fscache/object_bits.c | 120 ++ fs/fscache/operation.c | 633 ----------- fs/fscache/page.c | 1248 --------------------- fs/fscache/proc.c | 13 fs/fscache/read_helper.c | 580 ++++++++++ fs/fscache/stats.c | 251 +--- fs/internal.h | 5 fs/nfs/Kconfig | 2 fs/nfs/fscache-index.c | 4 fs/read_write.c | 1 include/linux/fs.h | 2 include/linux/fscache-cache.h | 507 ++------- include/linux/fscache-obsolete.h | 13 include/linux/fscache.h | 784 +++++-------- include/linux/pagemap.h | 14 include/linux/uio.h | 11 include/net/af_rxrpc.h | 2 include/trace/events/afs.h | 51 - include/trace/events/cachefiles.h | 285 ++++- include/trace/events/fscache.h | 439 +------ lib/iov_iter.c | 280 ++++- mm/filemap.c | 18 net/rxrpc/recvmsg.c | 9 67 files changed, 5655 insertions(+), 9674 deletions(-) delete mode 100644 Documentation/filesystems/caching/operations.txt create mode 100644 fs/cachefiles/content-map.c create mode 100644 fs/cachefiles/io.c delete mode 100644 fs/cachefiles/rdwr.c create mode 100644 fs/fscache/dispatcher.c create mode 100644 fs/fscache/io.c create mode 100644 fs/fscache/obj.c delete mode 100644 fs/fscache/object.c create mode 100644 fs/fscache/object_bits.c delete mode 100644 fs/fscache/operation.c delete mode 100644 fs/fscache/page.c create mode 100644 fs/fscache/read_helper.c create mode 100644 include/linux/fscache-obsolete.h
next reply other threads:[~2020-05-04 17:07 UTC|newest] Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-05-04 17:07 David Howells [this message] 2020-05-04 17:07 ` [RFC PATCH 00/61] fscache, cachefiles: Rewrite the I/O interface in terms of kiocb/iov_iter David Howells 2020-05-04 17:07 ` [RFC PATCH 01/61] afs: Make afs_zap_data() static David Howells 2020-05-04 17:07 ` [RFC PATCH 02/61] iov_iter: Add ITER_MAPPING David Howells 2020-05-04 17:07 ` David Howells 2020-05-04 17:07 ` [RFC PATCH 03/61] vm: Add wait/unlock functions for PG_fscache David Howells 2020-05-04 17:08 ` [RFC PATCH 04/61] vfs: Export rw_verify_area() for use by cachefiles David Howells 2020-05-04 17:08 ` [RFC PATCH 05/61] vfs: Provide S_CACHE_FILE inode flag David Howells 2020-05-04 17:08 ` David Howells 2020-05-04 17:08 ` [RFC PATCH 06/61] afs: Disable use of the fscache I/O routines David Howells 2020-05-04 17:08 ` [RFC PATCH 07/61] fscache: Add a cookie debug ID and use that in traces David Howells 2020-05-04 17:08 ` [RFC PATCH 08/61] fscache: Procfile to display cookies David Howells 2020-05-04 17:08 ` [RFC PATCH 09/61] fscache: Temporarily disable network filesystems' use of fscache David Howells 2020-05-04 17:08 ` [RFC PATCH 10/61] fscache: Remove the old I/O API David Howells 2020-05-04 17:08 ` David Howells 2020-05-04 17:09 ` [RFC PATCH 11/61] fscache: Remove the netfs data from the cookie David Howells 2020-05-04 17:09 ` [RFC PATCH 12/61] fscache: Remove struct fscache_cookie_def David Howells 2020-05-04 17:09 ` David Howells 2020-05-04 17:09 ` [RFC PATCH 13/61] fscache: Remove store_limit* from struct fscache_object David Howells 2020-05-04 17:09 ` [RFC PATCH 14/61] fscache: Remove fscache_check_consistency() David Howells 2020-05-04 17:09 ` David Howells 2020-05-04 17:09 ` [RFC PATCH 15/61] fscache: Remove fscache_attr_changed() David Howells 2020-05-04 17:09 ` [RFC PATCH 16/61] fscache: Remove obsolete stats David Howells 2020-05-04 17:09 ` David Howells 2020-05-04 17:10 ` [RFC PATCH 17/61] fscache: Remove old I/O tracepoints David Howells 2020-05-04 17:10 ` [RFC PATCH 18/61] fscache: Temporarily disable fscache_invalidate() David Howells 2020-05-04 17:10 ` [RFC PATCH 19/61] fscache: Remove the I/O operation manager David Howells 2020-05-04 17:10 ` David Howells 2020-05-04 17:10 ` [RFC PATCH 20/61] cachefiles: Remove tree of active files and use S_CACHE_FILE inode flag David Howells 2020-05-04 17:10 ` David Howells 2020-05-04 17:10 ` [RFC PATCH 21/61] fscache: Provide a simple thread pool for running ops asynchronously David Howells 2020-05-04 17:10 ` David Howells 2020-05-04 17:10 ` [RFC PATCH 22/61] fscache: Replace the object management state machine David Howells 2020-05-04 17:10 ` [RFC PATCH 23/61] fscache: Rewrite the I/O API based on iov_iter David Howells 2020-05-04 17:11 ` [RFC PATCH 24/61] fscache: Remove fscache_wait_on_invalidate() David Howells 2020-05-04 17:11 ` David Howells 2020-05-04 17:11 ` [RFC PATCH 25/61] fscache: Keep track of size of a file last set independently on the server David Howells 2020-05-04 17:11 ` [RFC PATCH 26/61] fscache, cachefiles: Fix disabled histogram warnings David Howells 2020-05-04 17:11 ` [RFC PATCH 27/61] fscache: Recast assertion in terms of cookie not being an index David Howells 2020-05-04 17:11 ` [RFC PATCH 28/61] cachefiles: Remove some redundant checks on unsigned values David Howells 2020-05-04 17:11 ` [RFC PATCH 29/61] cachefiles: trace: Log coherency checks David Howells 2020-05-04 17:12 ` [RFC PATCH 30/61] cachefiles: Split cachefiles_drop_object() up a bit David Howells 2020-05-04 17:12 ` David Howells 2020-05-04 17:12 ` [RFC PATCH 31/61] cachefiles: Implement new fscache I/O backend API David Howells 2020-05-04 17:12 ` [RFC PATCH 32/61] cachefiles: Merge object->backer into object->dentry David Howells 2020-05-04 17:12 ` David Howells 2020-05-04 17:12 ` [RFC PATCH 33/61] cachefiles: Implement a content-present indicator and bitmap David Howells 2020-05-04 17:12 ` [RFC PATCH 34/61] cachefiles: Implement extent shaper David Howells 2020-05-04 17:12 ` [RFC PATCH 35/61] cachefiles: Round the cachefile size up to DIO block size David Howells 2020-05-04 17:12 ` [RFC PATCH 36/61] cachefiles: Implement read and write parts of new I/O API David Howells 2020-05-04 17:13 ` [RFC PATCH 37/61] cachefiles: Add I/O tracepoints David Howells 2020-05-04 17:13 ` [RFC PATCH 38/61] fscache: Add read helper David Howells 2020-05-04 17:13 ` David Howells 2020-05-04 17:13 ` [RFC PATCH 39/61] fscache: Display cache-specific data in /proc/fs/fscache/objects David Howells 2020-05-04 17:13 ` David Howells 2020-05-04 17:13 ` [RFC PATCH 40/61] fscache: Remove more obsolete stats David Howells 2020-05-04 17:13 ` [RFC PATCH 41/61] fscache: New stats David Howells 2020-05-04 17:13 ` [RFC PATCH 42/61] fscache, cachefiles: Rewrite invalidation David Howells 2020-05-04 17:13 ` [RFC PATCH 43/61] fscache: Implement "will_modify" parameter on fscache_use_cookie() David Howells 2020-05-04 17:14 ` [RFC PATCH 44/61] fscache: Provide resize operation David Howells 2020-05-04 17:14 ` David Howells 2020-05-04 17:14 ` [RFC PATCH 45/61] fscache: Remove the update operation David Howells 2020-05-04 17:14 ` David Howells 2020-05-04 17:14 ` [RFC PATCH 46/61] cachefiles: Shape write requests David Howells 2020-05-04 17:14 ` [RFC PATCH 47/61] afs: Remove afs_zero_fid as it's not used David Howells 2020-05-04 17:14 ` [RFC PATCH 48/61] afs: Move key to afs_read struct David Howells 2020-05-04 17:14 ` David Howells 2020-05-04 17:14 ` [RFC PATCH 49/61] afs: Don't truncate iter during data fetch David Howells 2020-05-04 17:15 ` [RFC PATCH 50/61] afs: Set up the iov_iter before calling afs_extract_data() David Howells 2020-05-04 17:15 ` David Howells 2020-05-04 17:15 ` [RFC PATCH 51/61] afs: Use ITER_MAPPING for writing David Howells 2020-05-04 17:15 ` [RFC PATCH 52/61] afs: Interpose struct fscache_io_request into struct afs_read David Howells 2020-05-04 17:15 ` David Howells 2020-05-04 17:15 ` [RFC PATCH 53/61] afs: Note the amount transferred in fetch-data delivery David Howells 2020-05-04 17:15 ` [RFC PATCH 54/61] afs: Wait on PG_fscache before modifying/releasing a page David Howells 2020-05-05 11:59 ` Matthew Wilcox 2020-05-06 7:57 ` David Howells 2020-05-06 11:09 ` Matthew Wilcox 2020-05-06 14:24 ` David Howells 2020-05-08 14:39 ` David Howells 2020-05-08 14:39 ` David Howells 2020-05-04 17:15 ` [RFC PATCH 55/61] afs: Use new fscache I/O API David Howells 2020-05-04 17:15 ` [RFC PATCH 56/61] afs: Copy local writes to the cache when writing to the server David Howells 2020-05-04 17:16 ` [RFC PATCH 57/61] afs: Invoke fscache_resize_cookie() when handling ATTR_SIZE for setattr David Howells 2020-05-04 17:16 ` [RFC PATCH 58/61] fscache: Rewrite the main document David Howells 2020-05-04 17:16 ` [RFC PATCH 59/61] fscache: Remove the obsolete API bits from the documentation David Howells 2020-05-04 17:16 ` [RFC PATCH 60/61] fscache: Document the new netfs API David Howells 2020-05-04 17:16 ` [RFC PATCH 61/61] fscache: Document the rewritten cache backend API David Howells 2020-05-04 17:54 ` [RFC PATCH 00/61] fscache, cachefiles: Rewrite the I/O interface in terms of kiocb/iov_iter Jeff Layton 2020-05-04 17:54 ` Jeff Layton 2020-05-05 6:05 ` Christoph Hellwig 2020-05-05 6:05 ` Christoph Hellwig
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=158861203563.340223.7585359869938129395.stgit@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=anna.schumaker@netapp.com \ --cc=ceph-devel@vger.kernel.org \ --cc=jlayton@redhat.com \ --cc=linux-afs@lists.infradead.org \ --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=sfrench@samba.org \ --cc=trondmy@hammerspace.com \ --cc=v9fs-developer@lists.sourceforge.net \ --cc=viro@zeniv.linux.org.uk \ --cc=willy@infradead.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.