Commit f6d2353a authored by Ronnie Sahlberg's avatar Ronnie Sahlberg Committed by Steve French
Browse files

cifs: check the timestamp for the cached dirent when deciding on revalidate



Improves directory metadata caching

Signed-off-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent ed8561fa
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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