You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08: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:
committed by
Greg Kroah-Hartman
parent
c1b480e6be
commit
408fb2680e
@@ -369,6 +369,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)
|
||||
@@ -6464,7 +6472,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);
|
||||
|
||||
Reference in New Issue
Block a user