From: David Howells <dhowells@redhat.com> To: linux-cachefs@redhat.com, Steve French <sfrench@samba.org> Cc: dhowells@redhat.com, Shyam Prasad N <nspmangalore@gmail.com>, linux-cifs@vger.kernel.org, Trond Myklebust <trondmy@hammerspace.com>, Anna Schumaker <anna.schumaker@netapp.com>, Dominique Martinet <asmadeus@codewreck.org>, Jeff Layton <jlayton@kernel.org>, Matthew Wilcox <willy@infradead.org>, Alexander Viro <viro@zeniv.linux.org.uk>, Omar Sandoval <osandov@osandov.com>, JeffleXu <jefflexu@linux.alibaba.com>, Linus Torvalds <torvalds@linux-foundation.org>, linux-afs@lists.infradead.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs-developer@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 63/68] cifs: Support fscache indexing rewrite (untested) Date: Fri, 07 Jan 2022 21:52:42 +0000 [thread overview] Message-ID: <3419813.1641592362@warthog.procyon.org.uk> (raw) In-Reply-To: <164021579335.640689.2681324337038770579.stgit@warthog.procyon.org.uk> This patch isn't quite right and needs a fix. The attached patch fixes it. I'll fold that in and post a v5 of this patch. David --- cifs: Fix the fscache cookie management Fix the fscache cookie management in cifs in the following ways: (1) The cookie should be released in cifs_evict_inode() after it has been unused from being pinned by cifs_set_page_dirty(). (2) The cookie shouldn't be released in cifsFileInfo_put_final(). That's dealing with closing a file, not getting rid of an inode. The cookie needs to persist beyond the last file close because writepages may happen after closure. (3) The cookie needs to be used in cifs_atomic_open() to match cifs_open(). As yet unknown files being opened for writing seem to go by the former route rather than the latter. This can be triggered by something like: # systemctl start cachefilesd # mount //carina/test /xfstest.test -o user=shares,pass=xxxx.fsc # bash 5</xfstest.test/bar # echo hello >/xfstest.test/bar The key is to open the file R/O and then open it R/W and write to it whilst it's still open for R/O. A cookie isn't acquired if it's just opened R/W as it goes through the atomic_open method rather than the open method. Signed-off-by: David Howells <dhowells@redhat.com> --- fs/cifs/cifsfs.c | 8 ++++++++ fs/cifs/dir.c | 4 ++++ fs/cifs/file.c | 2 -- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index d3f3acf340f1..26cf2193c9a2 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -398,6 +398,7 @@ cifs_evict_inode(struct inode *inode) truncate_inode_pages_final(&inode->i_data); if (inode->i_state & I_PINNING_FSCACHE_WB) cifs_fscache_unuse_inode_cookie(inode, true); + cifs_fscache_release_inode_cookie(inode); clear_inode(inode); } @@ -722,6 +723,12 @@ static int cifs_show_stats(struct seq_file *s, struct dentry *root) } #endif +static int cifs_write_inode(struct inode *inode, struct writeback_control *wbc) +{ + fscache_unpin_writeback(wbc, cifs_inode_cookie(inode)); + return 0; +} + static int cifs_drop_inode(struct inode *inode) { struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); @@ -734,6 +741,7 @@ static int cifs_drop_inode(struct inode *inode) static const struct super_operations cifs_super_ops = { .statfs = cifs_statfs, .alloc_inode = cifs_alloc_inode, + .write_inode = cifs_write_inode, .free_inode = cifs_free_inode, .drop_inode = cifs_drop_inode, .evict_inode = cifs_evict_inode, diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 6e8e7cc26ae2..6186824b366e 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c @@ -22,6 +22,7 @@ #include "cifs_unicode.h" #include "fs_context.h" #include "cifs_ioctl.h" +#include "fscache.h" static void renew_parental_timestamps(struct dentry *direntry) @@ -509,6 +510,9 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, rc = -ENOMEM; } + fscache_use_cookie(cifs_inode_cookie(file_inode(file)), + file->f_mode & FMODE_WRITE); + out: cifs_put_tlink(tlink); out_free_xid: diff --git a/fs/cifs/file.c b/fs/cifs/file.c index d872f6fe8e7d..44da7646f789 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -376,8 +376,6 @@ static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file) struct cifsLockInfo *li, *tmp; struct super_block *sb = inode->i_sb; - cifs_fscache_release_inode_cookie(inode); - /* * Delete any outstanding lock records. We'll lose them when the file * is closed anyway.
next prev parent reply other threads:[~2022-01-07 21:53 UTC|newest] Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-12-22 23:13 [PATCH v4 00/68] fscache, cachefiles: Rewrite David Howells 2021-12-22 23:13 ` [PATCH v4 01/68] fscache, cachefiles: Disable configuration David Howells 2021-12-22 23:13 ` [PATCH v4 02/68] cachefiles: Delete the cachefiles driver pending rewrite David Howells 2021-12-22 23:14 ` [PATCH v4 03/68] fscache: Remove the contents of the fscache driver, " David Howells 2021-12-22 23:14 ` [PATCH v4 04/68] netfs: Display the netfs inode number in the netfs_read tracepoint David Howells 2021-12-22 23:14 ` [PATCH v4 05/68] netfs: Pass a flag to ->prepare_write() to say if there's no alloc'd space David Howells 2021-12-22 23:15 ` [PATCH v4 06/68] fscache: Introduce new driver David Howells 2021-12-22 23:15 ` [PATCH v4 07/68] fscache: Implement a hash function David Howells 2021-12-22 23:15 ` [PATCH v4 08/68] fscache: Implement cache registration David Howells 2021-12-22 23:15 ` [PATCH v4 09/68] fscache: Implement volume registration David Howells 2021-12-22 23:16 ` [PATCH v4 10/68] fscache: Implement cookie registration David Howells 2021-12-22 23:16 ` [PATCH v4 11/68] fscache: Implement cache-level access helpers David Howells 2021-12-22 23:16 ` [PATCH v4 12/68] fscache: Implement volume-level " David Howells 2021-12-22 23:17 ` [PATCH v4 13/68] fscache: Implement cookie-level " David Howells 2021-12-22 23:17 ` [PATCH v4 14/68] fscache: Implement functions add/remove a cache David Howells 2021-12-22 23:17 ` [PATCH v4 15/68] fscache: Provide and use cache methods to lookup/create/free a volume David Howells 2021-12-22 23:18 ` [PATCH v4 16/68] fscache: Add a function for a cache backend to note an I/O error David Howells 2021-12-22 23:18 ` [PATCH v4 17/68] fscache: Implement simple cookie state machine David Howells 2021-12-22 23:18 ` [PATCH v4 18/68] fscache: Implement cookie user counting and resource pinning David Howells 2021-12-22 23:18 ` [PATCH v4 19/68] fscache: Implement cookie invalidation David Howells 2021-12-22 23:18 ` [PATCH v4 20/68] fscache: Provide a means to begin an operation David Howells 2021-12-22 23:19 ` [PATCH v4 21/68] fscache: Count data storage objects in a cache David Howells 2021-12-22 23:19 ` [PATCH v4 22/68] fscache: Provide read/write stat counters for the cache David Howells 2021-12-22 23:19 ` [PATCH v4 23/68] fscache: Provide a function to let the netfs update its coherency data David Howells 2021-12-22 23:19 ` [PATCH v4 24/68] netfs: Pass more information on how to deal with a hole in the cache David Howells 2021-12-22 23:20 ` [PATCH v4 25/68] fscache: Implement raw I/O interface David Howells 2021-12-22 23:20 ` [PATCH v4 26/68] fscache: Implement higher-level write " David Howells 2021-12-22 23:20 ` [PATCH v4 27/68] vfs, fscache: Implement pinning of cache usage for writeback David Howells 2021-12-22 23:20 ` [PATCH v4 28/68] fscache: Provide a function to note the release of a page David Howells 2022-01-06 15:55 ` Jeff Layton 2022-01-06 16:26 ` David Howells 2021-12-22 23:21 ` [PATCH v4 29/68] fscache: Provide a function to resize a cookie David Howells 2021-12-22 23:21 ` [PATCH v4 30/68] cachefiles: Introduce rewritten driver David Howells 2021-12-22 23:21 ` [PATCH v4 31/68] cachefiles: Define structs David Howells 2021-12-22 23:22 ` [PATCH v4 32/68] cachefiles: Add some error injection support David Howells 2021-12-22 23:22 ` [PATCH v4 33/68] cachefiles: Add a couple of tracepoints for logging errors David Howells 2021-12-22 23:22 ` [PATCH v4 34/68] cachefiles: Add cache error reporting macro David Howells 2021-12-22 23:22 ` [PATCH v4 35/68] cachefiles: Add security derivation David Howells 2021-12-22 23:23 ` [PATCH v4 36/68] cachefiles: Register a miscdev and parse commands over it David Howells 2021-12-22 23:23 ` [PATCH v4 37/68] cachefiles: Provide a function to check how much space there is David Howells 2021-12-22 23:23 ` [PATCH v4 38/68] vfs, cachefiles: Mark a backing file in use with an inode flag David Howells 2022-01-06 17:04 ` Jeff Layton 2022-01-08 7:08 ` Amir Goldstein 2022-01-08 7:17 ` Matthew Wilcox 2022-01-10 7:53 ` Christoph Hellwig 2022-01-10 11:31 ` David Howells 2022-01-08 8:43 ` David Howells 2022-01-08 8:41 ` David Howells 2021-12-22 23:23 ` [PATCH v4 39/68] cachefiles: Implement a function to get/create a directory in the cache David Howells 2021-12-22 23:23 ` [PATCH v4 40/68] cachefiles: Implement cache registration and withdrawal David Howells 2022-01-06 17:17 ` Jeff Layton 2022-01-06 17:44 ` David Howells 2021-12-22 23:24 ` [PATCH v4 41/68] cachefiles: Implement volume support David Howells 2021-12-22 23:24 ` [PATCH v4 42/68] cachefiles: Add tracepoints for calls to the VFS David Howells 2021-12-22 23:24 ` [PATCH v4 43/68] cachefiles: Implement object lifecycle funcs David Howells 2021-12-22 23:24 ` [PATCH v4 44/68] cachefiles: Implement key to filename encoding David Howells 2022-01-06 17:43 ` Jeff Layton 2022-01-07 11:19 ` David Howells 2021-12-22 23:25 ` [PATCH v4 45/68] cachefiles: Implement metadata/coherency data storage in xattrs David Howells 2021-12-22 23:25 ` [PATCH v4 46/68] cachefiles: Mark a backing file in use with an inode flag David Howells 2022-01-06 18:04 ` Jeff Layton 2022-01-07 11:25 ` David Howells 2021-12-22 23:25 ` [PATCH v4 47/68] cachefiles: Implement culling daemon commands David Howells 2021-12-22 23:26 ` [PATCH v4 48/68] cachefiles: Implement backing file wrangling David Howells 2021-12-22 23:26 ` [PATCH v4 49/68] cachefiles: Implement begin and end I/O operation David Howells 2021-12-22 23:26 ` [PATCH v4 50/68] cachefiles: Implement cookie resize for truncate David Howells 2021-12-22 23:27 ` [PATCH v4 51/68] cachefiles: Implement the I/O routines David Howells 2021-12-22 23:27 ` [PATCH v4 52/68] fscache, cachefiles: Store the volume coherency data David Howells 2021-12-22 23:27 ` [PATCH v4 53/68] cachefiles: Allow cachefiles to actually function David Howells 2021-12-22 23:27 ` [PATCH v4 54/68] fscache, cachefiles: Display stats of no-space events David Howells 2021-12-22 23:27 ` [PATCH v4 55/68] fscache, cachefiles: Display stat of culling events David Howells 2021-12-22 23:28 ` [PATCH v4 56/68] afs: Convert afs to use the new fscache API David Howells 2021-12-22 23:28 ` [PATCH v4 57/68] afs: Copy local writes to the cache when writing to the server David Howells 2021-12-22 23:28 ` [PATCH v4 58/68] afs: Skip truncation on the server of data we haven't written yet David Howells 2021-12-22 23:28 ` [PATCH v4 59/68] 9p: Use fscache indexing rewrite and reenable caching David Howells 2021-12-22 23:29 ` [PATCH v4 60/68] 9p: Copy local writes to the cache when writing to the server David Howells 2021-12-22 23:29 ` [PATCH v4 61/68] nfs: Convert to new fscache volume/cookie API David Howells 2021-12-22 23:29 ` [PATCH v4 62/68] nfs: Implement cache I/O by accessing the cache directly David Howells 2021-12-22 23:29 ` [PATCH v4 63/68] cifs: Support fscache indexing rewrite (untested) David Howells 2021-12-22 23:30 ` [PATCH v4 64/68] ceph: conversion to new fscache API David Howells 2021-12-22 23:30 ` [PATCH v4 65/68] ceph: add fscache writeback support David Howells 2021-12-22 23:30 ` [PATCH v4 66/68] fscache: Rewrite documentation David Howells 2021-12-22 23:31 ` [PATCH v4 67/68] fscache: Add a tracepoint for cookie use/unuse David Howells 2021-12-22 23:31 ` [PATCH v4 68/68] 9p, afs, ceph, cifs, nfs: Use current_is_kswapd() rather than gfpflags_allow_blocking() David Howells 2022-01-04 10:50 ` [PATCH v4 00/68] fscache, cachefiles: Rewrite Jeff Layton 2022-01-04 11:27 ` David Wysochanski 2022-01-06 18:19 ` [Linux-cachefs] " Marc Dionne 2022-01-06 18:29 ` Jeff Layton 2022-01-07 21:52 ` David Howells [this message] 2022-01-09 15:27 ` [PATCH v4 63/68] cifs: Support fscache indexing rewrite (untested) Jeff Layton 2022-01-07 22:16 ` [PATCH v5 63/68] cifs: Support fscache indexing rewrite David Howells 2022-01-10 11:21 ` [PATCH v4 00/68] fscache, cachefiles: Rewrite Dominique Martinet 2022-01-10 11:51 ` Daire Byrne 2022-01-12 7:20 ` [PATCH v5 63/68] cifs: Support fscache indexing rewrite David Howells 2022-01-12 21:56 ` [PATCH v6] " David Howells 2022-01-13 16:20 ` 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=3419813.1641592362@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=anna.schumaker@netapp.com \ --cc=asmadeus@codewreck.org \ --cc=ceph-devel@vger.kernel.org \ --cc=jefflexu@linux.alibaba.com \ --cc=jlayton@kernel.org \ --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=osandov@osandov.com \ --cc=sfrench@samba.org \ --cc=torvalds@linux-foundation.org \ --cc=trondmy@hammerspace.com \ --cc=v9fs-developer@lists.sourceforge.net \ --cc=viro@zeniv.linux.org.uk \ --cc=willy@infradead.org \ --subject='Re: [PATCH v4 63/68] cifs: Support fscache indexing rewrite (untested)' \ /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 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.