From owner-svn-src-projects@FreeBSD.ORG Mon Jan 16 01:14:08 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 83F2F106566C; Mon, 16 Jan 2012 01:14:08 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 640418FC0C; Mon, 16 Jan 2012 01:14:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q0G1E8vB008923; Mon, 16 Jan 2012 01:14:08 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q0G1E8T2008919; Mon, 16 Jan 2012 01:14:08 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201201160114.q0G1E8T2008919@svn.freebsd.org> From: Rick Macklem Date: Mon, 16 Jan 2012 01:14:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r230182 - in projects/nfsv4.1-client/sys/fs: nfs nfsclient X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Jan 2012 01:14:08 -0000 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) {