NFSv4: nfs4_callback_getattr() should ignore revoked delegations
[linux-2.6-microblaze.git] / fs / nfs / callback_proc.c
index f39924b..cd4c6bc 100644 (file)
@@ -26,7 +26,6 @@ __be32 nfs4_callback_getattr(void *argp, void *resp,
        struct cb_getattrargs *args = argp;
        struct cb_getattrres *res = resp;
        struct nfs_delegation *delegation;
-       struct nfs_inode *nfsi;
        struct inode *inode;
 
        res->status = htonl(NFS4ERR_OP_NOT_IN_SESSION);
@@ -47,17 +46,16 @@ __be32 nfs4_callback_getattr(void *argp, void *resp,
                                -ntohl(res->status));
                goto out;
        }
-       nfsi = NFS_I(inode);
        rcu_read_lock();
-       delegation = rcu_dereference(nfsi->delegation);
+       delegation = nfs4_get_valid_delegation(inode);
        if (delegation == NULL || (delegation->type & FMODE_WRITE) == 0)
                goto out_iput;
        res->size = i_size_read(inode);
        res->change_attr = delegation->change_attr;
        if (nfs_have_writebacks(inode))
                res->change_attr++;
-       res->ctime = timespec64_to_timespec(inode->i_ctime);
-       res->mtime = timespec64_to_timespec(inode->i_mtime);
+       res->ctime = inode->i_ctime;
+       res->mtime = inode->i_mtime;
        res->bitmap[0] = (FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE) &
                args->bitmap[0];
        res->bitmap[1] = (FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY) &