aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4state.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-01-03 03:55:25 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-01-06 14:58:47 -0500
commitb4454fe1a7cb76a248d0641c9d68a44a1b8d9a1f (patch)
tree50ddc265e9700b1924e45ffce0f4583ba1013177 /fs/nfs/nfs4state.c
parent58d9714a44a79bba9b414da3ffbf3c753dc5915f (diff)
NFSv4: Remove requirement for machine creds for the "renew" operation
In RFC3530, the RENEW operation is allowed to use either the same principal, RPC security flavour and (if RPCSEC_GSS), the same mechanism and service that was used for SETCLIENTID_CONFIRM OR Any principal, RPC security flavour and service combination that currently has an OPEN file on the server. Choose the latter since that doesn't require us to keep credentials for the same principal for the entire duration of the mount. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4state.c')
-rw-r--r--fs/nfs/nfs4state.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index f2148376f1a7..18f6ed1a0b54 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -232,6 +232,20 @@ nfs4_client_grab_unused(struct nfs4_client *clp, struct rpc_cred *cred)
232 return sp; 232 return sp;
233} 233}
234 234
235struct rpc_cred *nfs4_get_renew_cred(struct nfs4_client *clp)
236{
237 struct nfs4_state_owner *sp;
238 struct rpc_cred *cred = NULL;
239
240 list_for_each_entry(sp, &clp->cl_state_owners, so_list) {
241 if (list_empty(&sp->so_states))
242 continue;
243 cred = get_rpccred(sp->so_cred);
244 break;
245 }
246 return cred;
247}
248
235static struct nfs4_state_owner * 249static struct nfs4_state_owner *
236nfs4_find_state_owner(struct nfs4_client *clp, struct rpc_cred *cred) 250nfs4_find_state_owner(struct nfs4_client *clp, struct rpc_cred *cred)
237{ 251{
@@ -899,7 +913,7 @@ static int reclaimer(void *ptr)
899 if (list_empty(&clp->cl_superblocks)) 913 if (list_empty(&clp->cl_superblocks))
900 goto out; 914 goto out;
901restart_loop: 915restart_loop:
902 status = nfs4_proc_renew(clp); 916 status = nfs4_proc_renew(clp, clp->cl_cred);
903 switch (status) { 917 switch (status) {
904 case 0: 918 case 0:
905 case -NFS4ERR_CB_PATH_DOWN: 919 case -NFS4ERR_CB_PATH_DOWN: