svn commit: r230182 - in projects/nfsv4.1-client/sys/fs: nfs
nfsclient
Rick Macklem
rmacklem at FreeBSD.org
Mon Jan 16 01:14:08 UTC 2012
Author: rmacklem
Date: Mon Jan 16 01:14:07 2012
New Revision: 230182
URL: http://svn.freebsd.org/changeset/base/230182
Log:
Modify nfsrpc_setclient() so that it fills the clientid verifier into
the nfsclclient structure, since the same verifier needs to be used
for exchange_id when done on the data server (DS). Also, pass the
nfsclsession structure as a separate argument to nfsrpc_exchangeid(),
so that there can be a different one passed in for each DS.
Modified:
projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h
projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h Mon Jan 16 00:26:52 2012 (r230181)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h Mon Jan 16 01:14:07 2012 (r230182)
@@ -437,7 +437,7 @@ int nfsrpc_delegreturn(struct nfscldeleg
int nfsrpc_getacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *, void *);
int nfsrpc_setacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *, void *);
int nfsrpc_exchangeid(struct nfsmount *, struct nfsclclient *,
- uint32_t, struct ucred *, NFSPROC_T *);
+ struct nfsclsession *, uint32_t, struct ucred *, NFSPROC_T *);
int nfsrpc_createsession(struct nfsmount *, struct nfsclclient *,
struct ucred *, NFSPROC_T *);
int nfsrpc_destroysession(struct nfsmount *, struct nfsclclient *,
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h Mon Jan 16 00:26:52 2012 (r230181)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfsclstate.h Mon Jan 16 01:14:07 2012 (r230182)
@@ -83,6 +83,7 @@ struct nfsclclient {
struct nfsmount *nfsc_nmp;
time_t nfsc_expire;
u_int32_t nfsc_clientidrev;
+ u_int32_t nfsc_rev;
u_int32_t nfsc_renew;
u_int32_t nfsc_cbident;
u_int16_t nfsc_flags;
Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Mon Jan 16 00:26:52 2012 (r230181)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Mon Jan 16 01:14:07 2012 (r230182)
@@ -792,9 +792,10 @@ nfsrpc_setclient(struct nfsmount *nmp, s
if (nfsboottime.tv_sec == 0)
NFSSETBOOTTIME(nfsboottime);
+ clp->nfsc_rev = rev++;
if (NFSHASNFSV4N(nmp)) {
- error = nfsrpc_exchangeid(nmp, clp, NFSV4EXCH_USEPNFSMDS |
- NFSV4EXCH_USENONPNFS, cred, p);
+ error = nfsrpc_exchangeid(nmp, clp, &clp->nfsc_sess,
+ NFSV4EXCH_USEPNFSMDS | NFSV4EXCH_USENONPNFS, cred, p);
if (error) printf("exch=%d\n",error);
if (error == 0)
error = nfsrpc_createsession(nmp, clp, cred, p);
@@ -804,7 +805,7 @@ if (error) printf("aft crs=%d\n",error);
nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
*tl++ = txdr_unsigned(nfsboottime.tv_sec);
- *tl = txdr_unsigned(rev++);
+ *tl = txdr_unsigned(clp->nfsc_rev);
(void) nfsm_strtom(nd, clp->nfsc_id, clp->nfsc_idlen);
/*
@@ -4278,19 +4279,19 @@ nfsrpc_setaclrpc(vnode_t vp, struct ucre
*/
int
nfsrpc_exchangeid(struct nfsmount *nmp, struct nfsclclient *clp,
- uint32_t exchflags, struct ucred *cred, NFSPROC_T *p)
+ struct nfsclsession *sep, uint32_t exchflags, struct ucred *cred,
+ NFSPROC_T *p)
{
uint32_t *tl, v41flags;
struct nfsrv_descript nfsd;
struct nfsrv_descript *nd = &nfsd;
struct timespec verstime;
int error;
- static uint32_t rev = 0;
nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED);
*tl++ = txdr_unsigned(nfsboottime.tv_sec); /* Client owner */
- *tl = txdr_unsigned(rev++);
+ *tl = txdr_unsigned(clp->nfsc_rev);
(void) nfsm_strtom(nd, clp->nfsc_id, clp->nfsc_idlen);
NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
@@ -4313,9 +4314,9 @@ printf("exch err=%d reps=%d\n",error,nd-
return (error);
if (nd->nd_repstat == 0) {
NFSM_DISSECT(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
- clp->nfsc_clientid.lval[0] = *tl++;
- clp->nfsc_clientid.lval[1] = *tl++;
- clp->nfsc_sequenceid = fxdr_unsigned(uint32_t, *tl++);
+ sep->nfsess_clientid.lval[0] = *tl++;
+ sep->nfsess_clientid.lval[1] = *tl++;
+ sep->nfsess_sequenceid = fxdr_unsigned(uint32_t, *tl++);
v41flags = fxdr_unsigned(uint32_t, *tl);
printf("v41fl=0x%x\n", v41flags);
if ((v41flags & NFSV4EXCH_USEPNFSMDS) != 0) {
More information about the svn-src-projects
mailing list