Here are some patches to debug and fix FS-Cache problems. (1) A debugging patch to add a predictable pattern generator with a filesystem interface. Can be used to generate regular apparent changes on the NFS server. This was very useful in breaking FS-Cache. (2) A patch to correctly mark cached netfs pages. (3) A debugging patch to validate page->mapping on a page for which retrieval was requested. (4) A patch to downgrade memory allocation levels in the cache to not try so hard and to be more willing to abort with ENOMEM. It's a cache - it doesn't matter if we can't store something. (5) A debugging patch to check that there are no read operations outstanding on a cookie when it is relinquished. (6) A debugging patch to check that the object cookie pointer doesn't get cleared whilst we're trying to read for it. (7) A patch to make conditional some debugging prints. (8) A patch to make cookie relinquishment log a warning and wait for any outstanding reads. (9) A patch to fix up operation state handling and accounting. (10) A patch to provide proper invalidation facilities. (11) A patch to make a vfs_truncate() for cachefiles's invalidation to call. Question: CacheFiles uses truncation in a couple of places. It has been using notify_change() rather than sys_truncate() or something similar. This means it bypasses a bunch of checks and suchlike that it possibly should be making (security, file locking, lease breaking, vfsmount write). Should it be using vfs_truncate() as added by a preceding patch or should it use notify_write() and assume that anyone poking around in the cache files on disk gets everything they deserve? (12) A patch to provide invalidation for cachefiles. (13) A patch to make NFS use the invalidation call. David --- David Howells (13): NFS: Use FS-Cache invalidation CacheFiles: Implement invalidation VFS: Make more complete truncate operation available to CacheFiles FS-Cache: Provide proper invalidation FS-Cache: Fix operation state management and accounting FS-Cache: Make cookie relinquishment wait for outstanding reads CacheFiles: Make some debugging statements conditional FS-Cache: Check cookie is still correct in __fscache_read_or_alloc_pages() FS-Cache: Check that there are no read ops when cookie relinquished CacheFiles: Downgrade the requirements passed to the allocator FS-Cache: Validate page mapping pointer value CacheFiles: Fix the marking of cached pages Noisefs: A predictable noise producing fs for testing things Documentation/filesystems/caching/backend-api.txt | 38 ++ Documentation/filesystems/caching/netfs-api.txt | 46 ++- Documentation/filesystems/caching/object.txt | 23 + Documentation/filesystems/caching/operations.txt | 2 fs/Kconfig | 1 fs/Makefile | 1 fs/cachefiles/interface.c | 57 +++- fs/cachefiles/internal.h | 2 fs/cachefiles/key.c | 2 fs/cachefiles/rdwr.c | 118 ++++--- fs/cachefiles/xattr.c | 2 fs/fscache/cookie.c | 78 +++++ fs/fscache/internal.h | 10 + fs/fscache/object.c | 74 +++++ fs/fscache/operation.c | 135 ++++++--- fs/fscache/page.c | 188 ++++++++++-- fs/fscache/stats.c | 11 + fs/nfs/fscache.h | 20 + fs/nfs/inode.c | 20 + fs/nfs/nfs4proc.c | 2 fs/noisefs/Kconfig | 20 + fs/noisefs/Makefile | 7 fs/noisefs/file.c | 331 +++++++++++++++++++++ fs/noisefs/inode.c | 171 +++++++++++ fs/noisefs/internal.h | 59 ++++ fs/noisefs/super.c | 302 +++++++++++++++++++ fs/open.c | 50 ++- include/linux/fs.h | 1 include/linux/fscache-cache.h | 53 +++ include/linux/fscache.h | 50 +++ mm/page-writeback.c | 1 31 files changed, 1696 insertions(+), 179 deletions(-) create mode 100644 fs/noisefs/Kconfig create mode 100644 fs/noisefs/Makefile create mode 100644 fs/noisefs/file.c create mode 100644 fs/noisefs/inode.c create mode 100644 fs/noisefs/internal.h create mode 100644 fs/noisefs/super.c -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html