Date: Mon, 16 Jan 2012 01:14:08 +0000 (UTC) From: Rick Macklem <rmacklem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r230182 - in projects/nfsv4.1-client/sys/fs: nfs nfsclient Message-ID: <201201160114.q0G1E8T2008919@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201160114.q0G1E8T2008919>