|
@@ -682,7 +682,7 @@ int
|
|
|
__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
|
|
{
|
|
|
int status = -ESTALE;
|
|
|
- struct nfs_fattr fattr;
|
|
|
+ struct nfs_fattr *fattr = NULL;
|
|
|
struct nfs_inode *nfsi = NFS_I(inode);
|
|
|
|
|
|
dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n",
|
|
@@ -693,8 +693,13 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
|
|
if (NFS_STALE(inode))
|
|
|
goto out;
|
|
|
|
|
|
+ status = -ENOMEM;
|
|
|
+ fattr = nfs_alloc_fattr();
|
|
|
+ if (fattr == NULL)
|
|
|
+ goto out;
|
|
|
+
|
|
|
nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
|
|
|
- status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), &fattr);
|
|
|
+ status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr);
|
|
|
if (status != 0) {
|
|
|
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n",
|
|
|
inode->i_sb->s_id,
|
|
@@ -707,7 +712,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- status = nfs_refresh_inode(inode, &fattr);
|
|
|
+ status = nfs_refresh_inode(inode, fattr);
|
|
|
if (status) {
|
|
|
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n",
|
|
|
inode->i_sb->s_id,
|
|
@@ -723,6 +728,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
|
|
(long long)NFS_FILEID(inode));
|
|
|
|
|
|
out:
|
|
|
+ nfs_free_fattr(fattr);
|
|
|
return status;
|
|
|
}
|
|
|
|