|
@@ -450,7 +450,8 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
|
|
|
nfs_refresh_inode(dentry->d_inode, entry->fattr);
|
|
|
goto out;
|
|
|
} else {
|
|
|
- d_drop(dentry);
|
|
|
+ if (d_invalidate(dentry) != 0)
|
|
|
+ goto out;
|
|
|
dput(dentry);
|
|
|
}
|
|
|
}
|
|
@@ -1100,6 +1101,8 @@ out_set_verifier:
|
|
|
out_zap_parent:
|
|
|
nfs_zap_caches(dir);
|
|
|
out_bad:
|
|
|
+ nfs_free_fattr(fattr);
|
|
|
+ nfs_free_fhandle(fhandle);
|
|
|
nfs_mark_for_revalidate(dir);
|
|
|
if (inode && S_ISDIR(inode->i_mode)) {
|
|
|
/* Purge readdir caches. */
|
|
@@ -1112,8 +1115,6 @@ out_zap_parent:
|
|
|
shrink_dcache_parent(dentry);
|
|
|
}
|
|
|
d_drop(dentry);
|
|
|
- nfs_free_fattr(fattr);
|
|
|
- nfs_free_fhandle(fhandle);
|
|
|
dput(parent);
|
|
|
dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is invalid\n",
|
|
|
__func__, dentry->d_parent->d_name.name,
|