On Thu, 2023-01-12 at 09:26 +0800, Chengen Du wrote: > Hi, > > The patch follows the commit 0eb43812c027 but handles the stale cache > in rcu path. > The stale cache will remain in the list's tail if no other users > operate on that inode. > May I ask if this patch has any other concerns or drawbacks that need > to be considered? > > Best regards, > Chengen Du No complaints. The patch has already been merged into 6.2-rc3. Thanks! Trond > > On Fri, Dec 30, 2022 at 11:05 AM Chengen Du > <chengen.du@xxxxxxxxxxxxx> wrote: > > > > If the user's login time is newer than the cache's timestamp, > > we expect the cache may be stale and need to clear. > > The stale cache will remain in the list's tail if no other > > users operate on that inode. > > Once the user accesses the inode, the stale cache will be > > returned in rcu path. > > > > Signed-off-by: Chengen Du <chengen.du@xxxxxxxxxxxxx> > > --- > > fs/nfs/dir.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c > > index ea1ceffa1d3a..d490d64a9ebd 100644 > > --- a/fs/nfs/dir.c > > +++ b/fs/nfs/dir.c > > @@ -3023,6 +3023,7 @@ static int nfs_access_get_cached_rcu(struct > > inode *inode, const struct cred *cre > > * but do it without locking. > > */ > > struct nfs_inode *nfsi = NFS_I(inode); > > + u64 login_time = nfs_access_login_time(current, cred); > > struct nfs_access_entry *cache; > > int err = -ECHILD; > > struct list_head *lh; > > @@ -3037,6 +3038,8 @@ static int nfs_access_get_cached_rcu(struct > > inode *inode, const struct cred *cre > > cache = NULL; > > if (cache == NULL) > > goto out; > > + if ((s64)(login_time - cache->timestamp) > 0) > > + goto out; > > if (nfs_check_cache_invalid(inode, NFS_INO_INVALID_ACCESS)) > > goto out; > > *mask = cache->mask; > > -- > > 2.37.2 > > -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx