Commit fa923369 authored by Trond Myklebust's avatar Trond Myklebust

NFS: Don't require a filehandle to refresh the inode in nfs_prime_dcache()

If the server does not return a valid set of attributes that we can
use to either create a file or refresh the inode, then there is no
value in calling nfs_prime_dcache().

However if we're just refreshing the inode using the attributes that
the server returned, then it shouldn't matter whether or not we have
a filehandle, as long as we check the fsid+fileid combination.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 1ae04b25
...@@ -408,13 +408,21 @@ static int xdr_decode(nfs_readdir_descriptor_t *desc, ...@@ -408,13 +408,21 @@ static int xdr_decode(nfs_readdir_descriptor_t *desc,
return 0; return 0;
} }
/* Match file and dirent using either filehandle or fileid
* Note: caller is responsible for checking the fsid
*/
static static
int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry) int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry)
{ {
struct nfs_inode *nfsi;
if (dentry->d_inode == NULL) if (dentry->d_inode == NULL)
goto different; goto different;
if (nfs_compare_fh(entry->fh, NFS_FH(dentry->d_inode)) != 0)
goto different; nfsi = NFS_I(dentry->d_inode);
if (entry->fattr->fileid == nfsi->fileid)
return 1;
if (nfs_compare_fh(entry->fh, &nfsi->fh) == 0)
return 1; return 1;
different: different:
return 0; return 0;
...@@ -469,6 +477,8 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry) ...@@ -469,6 +477,8 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
struct inode *inode; struct inode *inode;
int status; int status;
if (!(entry->fattr->valid & NFS_ATTR_FATTR_FILEID))
return;
if (!(entry->fattr->valid & NFS_ATTR_FATTR_FSID)) if (!(entry->fattr->valid & NFS_ATTR_FATTR_FSID))
return; return;
if (filename.name[0] == '.') { if (filename.name[0] == '.') {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment