Skip site navigation (1)Skip section navigation (2)
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>