mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
NFSv4: Don't invalidate inode attributes on delegation return
commit00c94ebec5upstream. 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:0bc2c9b4dc("NFSv4: Don't discard the attributes returned by asynchronous DELEGRETURN") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c1b480e6be
commit
408fb2680e
|
|
@ -369,6 +369,14 @@ static void nfs4_setup_readdir(u64 cookie, __be32 *verifier, struct dentry *dent
|
||||||
kunmap_atomic(start);
|
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,
|
static void nfs4_test_and_free_stateid(struct nfs_server *server,
|
||||||
nfs4_stateid *stateid,
|
nfs4_stateid *stateid,
|
||||||
const struct cred *cred)
|
const struct cred *cred)
|
||||||
|
|
@ -6464,7 +6472,9 @@ static void nfs4_delegreturn_release(void *calldata)
|
||||||
pnfs_roc_release(&data->lr.arg, &data->lr.res,
|
pnfs_roc_release(&data->lr.arg, &data->lr.res,
|
||||||
data->res.lr_ret);
|
data->res.lr_ret);
|
||||||
if (inode) {
|
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);
|
nfs_iput_and_deactive(inode);
|
||||||
}
|
}
|
||||||
kfree(calldata);
|
kfree(calldata);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user