NFSv4: Don't invalidate inode attributes on delegation return
[ Upstream commit 00c94ebec5925593c0377b941289224469e72ac7 ] There is no need to declare attributes such as the ctime, mtime and block size invalid when we're just returning a delegation, so it is inappropriate to call nfs_post_op_update_inode_force_wcc(). Instead, just call nfs_refresh_inode() after faking up the change attribute. We know that the GETATTR op occurs before the DELEGRETURN, so we are safe when doing this. Fixes: 0bc2c9b4dca9 ("NFSv4: Don't discard the attributes returned by asynchronous DELEGRETURN") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
89e7a625ec
commit
f455c8e657
@ -359,6 +359,14 @@ static void nfs4_setup_readdir(u64 cookie, __be32 *verifier, struct dentry *dent
|
||||
kunmap_atomic(start);
|
||||
}
|
||||
|
||||
static void nfs4_fattr_set_prechange(struct nfs_fattr *fattr, u64 version)
|
||||
{
|
||||
if (!(fattr->valid & NFS_ATTR_FATTR_PRECHANGE)) {
|
||||
fattr->pre_change_attr = version;
|
||||
fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
|
||||
}
|
||||
}
|
||||
|
||||
static void nfs4_test_and_free_stateid(struct nfs_server *server,
|
||||
nfs4_stateid *stateid,
|
||||
const struct cred *cred)
|
||||
@ -6307,7 +6315,9 @@ static void nfs4_delegreturn_release(void *calldata)
|
||||
pnfs_roc_release(&data->lr.arg, &data->lr.res,
|
||||
data->res.lr_ret);
|
||||
if (inode) {
|
||||
nfs_post_op_update_inode_force_wcc(inode, &data->fattr);
|
||||
nfs4_fattr_set_prechange(&data->fattr,
|
||||
inode_peek_iversion_raw(inode));
|
||||
nfs_refresh_inode(inode, &data->fattr);
|
||||
nfs_iput_and_deactive(inode);
|
||||
}
|
||||
kfree(calldata);
|
||||
|
Loading…
x
Reference in New Issue
Block a user