diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 09:55:25 +0100 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:47 -0500 |
commit | b4454fe1a7cb76a248d0641c9d68a44a1b8d9a1f (patch) | |
tree | 50ddc265e9700b1924e45ffce0f4583ba1013177 /fs/nfs/nfs4renewd.c | |
parent | 58d9714a44a79bba9b414da3ffbf3c753dc5915f (diff) | |
download | kernel_samsung_smdk4412-b4454fe1a7cb76a248d0641c9d68a44a1b8d9a1f.tar.gz kernel_samsung_smdk4412-b4454fe1a7cb76a248d0641c9d68a44a1b8d9a1f.tar.bz2 kernel_samsung_smdk4412-b4454fe1a7cb76a248d0641c9d68a44a1b8d9a1f.zip |
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/nfs4renewd.c')
-rw-r--r-- | fs/nfs/nfs4renewd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/nfs/nfs4renewd.c b/fs/nfs/nfs4renewd.c index f62c2f7a4ff..5d764d8e6d8 100644 --- a/fs/nfs/nfs4renewd.c +++ b/fs/nfs/nfs4renewd.c @@ -62,6 +62,7 @@ void nfs4_renew_state(void *data) { struct nfs4_client *clp = (struct nfs4_client *)data; + struct rpc_cred *cred; long lease, timeout; unsigned long last, now; @@ -77,7 +78,8 @@ nfs4_renew_state(void *data) timeout = (2 * lease) / 3 + (long)last - (long)now; /* Are we close to a lease timeout? */ if (time_after(now, last + lease/3)) { - if (list_empty(&clp->cl_state_owners)) { + cred = nfs4_get_renew_cred(clp); + if (cred == NULL) { set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); spin_unlock(&clp->cl_lock); nfs_expire_all_delegations(clp); @@ -85,7 +87,8 @@ nfs4_renew_state(void *data) } spin_unlock(&clp->cl_lock); /* Queue an asynchronous RENEW. */ - nfs4_proc_async_renew(clp); + nfs4_proc_async_renew(clp, cred); + put_rpccred(cred); timeout = (2 * lease) / 3; spin_lock(&clp->cl_lock); } else |