mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 04:41:26 +00:00
NFSv41: Fix nfs_async_inode_return_delegation() ugliness
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c48f4f3541
commit
e047a10c12
@ -62,16 +62,6 @@ out:
|
|||||||
return res->status;
|
return res->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int (*nfs_validate_delegation_stateid(struct nfs_client *clp))(struct nfs_delegation *, const nfs4_stateid *)
|
|
||||||
{
|
|
||||||
#if defined(CONFIG_NFS_V4_1)
|
|
||||||
if (clp->cl_minorversion > 0)
|
|
||||||
return nfs41_validate_delegation_stateid;
|
|
||||||
#endif
|
|
||||||
return nfs4_validate_delegation_stateid;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
__be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy)
|
__be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy)
|
||||||
{
|
{
|
||||||
struct nfs_client *clp;
|
struct nfs_client *clp;
|
||||||
@ -92,8 +82,7 @@ __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy)
|
|||||||
inode = nfs_delegation_find_inode(clp, &args->fh);
|
inode = nfs_delegation_find_inode(clp, &args->fh);
|
||||||
if (inode != NULL) {
|
if (inode != NULL) {
|
||||||
/* Set up a helper thread to actually return the delegation */
|
/* Set up a helper thread to actually return the delegation */
|
||||||
switch (nfs_async_inode_return_delegation(inode, &args->stateid,
|
switch (nfs_async_inode_return_delegation(inode, &args->stateid)) {
|
||||||
nfs_validate_delegation_stateid(clp))) {
|
|
||||||
case 0:
|
case 0:
|
||||||
res = 0;
|
res = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -471,9 +471,7 @@ void nfs_expire_unreferenced_delegations(struct nfs_client *clp)
|
|||||||
/*
|
/*
|
||||||
* Asynchronous delegation recall!
|
* Asynchronous delegation recall!
|
||||||
*/
|
*/
|
||||||
int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *stateid,
|
int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *stateid)
|
||||||
int (*validate_stateid)(struct nfs_delegation *delegation,
|
|
||||||
const nfs4_stateid *stateid))
|
|
||||||
{
|
{
|
||||||
struct nfs_client *clp = NFS_SERVER(inode)->nfs_client;
|
struct nfs_client *clp = NFS_SERVER(inode)->nfs_client;
|
||||||
struct nfs_delegation *delegation;
|
struct nfs_delegation *delegation;
|
||||||
@ -481,7 +479,7 @@ int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *s
|
|||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
delegation = rcu_dereference(NFS_I(inode)->delegation);
|
delegation = rcu_dereference(NFS_I(inode)->delegation);
|
||||||
|
|
||||||
if (!validate_stateid(delegation, stateid)) {
|
if (!clp->cl_mvops->validate_stateid(delegation, stateid)) {
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,7 @@ enum {
|
|||||||
int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
|
int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
|
||||||
void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
|
void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
|
||||||
int nfs_inode_return_delegation(struct inode *inode);
|
int nfs_inode_return_delegation(struct inode *inode);
|
||||||
int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *stateid,
|
int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *stateid);
|
||||||
int (*validate_stateid)(struct nfs_delegation *delegation,
|
|
||||||
const nfs4_stateid *stateid));
|
|
||||||
void nfs_inode_return_delegation_noreclaim(struct inode *inode);
|
void nfs_inode_return_delegation_noreclaim(struct inode *inode);
|
||||||
|
|
||||||
struct inode *nfs_delegation_find_inode(struct nfs_client *clp, const struct nfs_fh *fhandle);
|
struct inode *nfs_delegation_find_inode(struct nfs_client *clp, const struct nfs_fh *fhandle);
|
||||||
|
@ -60,6 +60,8 @@ struct nfs4_minor_version_ops {
|
|||||||
struct nfs4_sequence_args *args,
|
struct nfs4_sequence_args *args,
|
||||||
struct nfs4_sequence_res *res,
|
struct nfs4_sequence_res *res,
|
||||||
int cache_reply);
|
int cache_reply);
|
||||||
|
int (*validate_stateid)(struct nfs_delegation *,
|
||||||
|
const nfs4_stateid *);
|
||||||
const struct nfs4_state_recovery_ops *reboot_recovery_ops;
|
const struct nfs4_state_recovery_ops *reboot_recovery_ops;
|
||||||
const struct nfs4_state_recovery_ops *nograce_recovery_ops;
|
const struct nfs4_state_recovery_ops *nograce_recovery_ops;
|
||||||
const struct nfs4_state_maintenance_ops *state_renewal_ops;
|
const struct nfs4_state_maintenance_ops *state_renewal_ops;
|
||||||
|
@ -5356,6 +5356,7 @@ struct nfs4_state_maintenance_ops nfs41_state_renewal_ops = {
|
|||||||
static const struct nfs4_minor_version_ops nfs_v4_0_minor_ops = {
|
static const struct nfs4_minor_version_ops nfs_v4_0_minor_ops = {
|
||||||
.minor_version = 0,
|
.minor_version = 0,
|
||||||
.call_sync = _nfs4_call_sync,
|
.call_sync = _nfs4_call_sync,
|
||||||
|
.validate_stateid = nfs4_validate_delegation_stateid,
|
||||||
.reboot_recovery_ops = &nfs40_reboot_recovery_ops,
|
.reboot_recovery_ops = &nfs40_reboot_recovery_ops,
|
||||||
.nograce_recovery_ops = &nfs40_nograce_recovery_ops,
|
.nograce_recovery_ops = &nfs40_nograce_recovery_ops,
|
||||||
.state_renewal_ops = &nfs40_state_renewal_ops,
|
.state_renewal_ops = &nfs40_state_renewal_ops,
|
||||||
@ -5365,6 +5366,7 @@ static const struct nfs4_minor_version_ops nfs_v4_0_minor_ops = {
|
|||||||
static const struct nfs4_minor_version_ops nfs_v4_1_minor_ops = {
|
static const struct nfs4_minor_version_ops nfs_v4_1_minor_ops = {
|
||||||
.minor_version = 1,
|
.minor_version = 1,
|
||||||
.call_sync = _nfs4_call_sync_session,
|
.call_sync = _nfs4_call_sync_session,
|
||||||
|
.validate_stateid = nfs41_validate_delegation_stateid,
|
||||||
.reboot_recovery_ops = &nfs41_reboot_recovery_ops,
|
.reboot_recovery_ops = &nfs41_reboot_recovery_ops,
|
||||||
.nograce_recovery_ops = &nfs41_nograce_recovery_ops,
|
.nograce_recovery_ops = &nfs41_nograce_recovery_ops,
|
||||||
.state_renewal_ops = &nfs41_state_renewal_ops,
|
.state_renewal_ops = &nfs41_state_renewal_ops,
|
||||||
|
Loading…
Reference in New Issue
Block a user