Skip to content

Commit

Permalink
cifs: check the timestamp for the cached dirent when deciding on reva…
Browse files Browse the repository at this point in the history
…lidate

Improves directory metadata caching

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
  • Loading branch information
Ronnie Sahlberg authored and Steve French committed Apr 25, 2021
1 parent ed8561f commit f6d2353
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions fs/cifs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2193,6 +2193,8 @@ cifs_dentry_needs_reval(struct dentry *dentry)
struct inode *inode = d_inode(dentry);
struct cifsInodeInfo *cifs_i = CIFS_I(inode);
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
struct cached_fid *cfid = NULL;

if (cifs_i->time == 0)
return true;
Expand All @@ -2203,6 +2205,16 @@ cifs_dentry_needs_reval(struct dentry *dentry)
if (!lookupCacheEnabled)
return true;

if (!open_cached_dir_by_dentry(tcon, dentry->d_parent, &cfid)) {
mutex_lock(&cfid->fid_mutex);
if (cfid->time && cifs_i->time > cfid->time) {
mutex_unlock(&cfid->fid_mutex);
close_cached_dir(cfid);
return false;
}
mutex_unlock(&cfid->fid_mutex);
close_cached_dir(cfid);
}
/*
* depending on inode type, check if attribute caching disabled for
* files or directories
Expand Down

0 comments on commit f6d2353

Please sign in to comment.