From owner-svn-src-projects@FreeBSD.ORG Sun Apr 29 22:01:23 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 A3D32106564A; Sun, 29 Apr 2012 22:01:23 +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 8EB518FC14; Sun, 29 Apr 2012 22:01:23 +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 q3TM1Npu034331; Sun, 29 Apr 2012 22:01:23 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q3TM1NTg034328; Sun, 29 Apr 2012 22:01:23 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201204292201.q3TM1NTg034328@svn.freebsd.org> From: Rick Macklem Date: Sun, 29 Apr 2012 22:01:23 +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: r234818 - 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: Sun, 29 Apr 2012 22:01:23 -0000 Author: rmacklem Date: Sun Apr 29 22:01:23 2012 New Revision: 234818 URL: http://svn.freebsd.org/changeset/base/234818 Log: Fix the NFSv4.1 client so that it doesn't ask for a persistent session for read only mounts. Also, mark whether or not the server has provided a persistent session for the MDS. Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsport.h projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Modified: projects/nfsv4.1-client/sys/fs/nfs/nfsport.h ============================================================================== --- projects/nfsv4.1-client/sys/fs/nfs/nfsport.h Sun Apr 29 20:27:44 2012 (r234817) +++ projects/nfsv4.1-client/sys/fs/nfs/nfsport.h Sun Apr 29 22:01:23 2012 (r234818) @@ -835,6 +835,7 @@ void newnfs_realign(struct mbuf **); */ #define NFSSTA_HASWRITEVERF 0x00040000 /* Has write verifier */ #define NFSSTA_GOTFSINFO 0x00100000 /* Got the fsinfo */ +#define NFSSTA_SESSPERSIST 0x08000000 /* Has a persistent session */ #define NFSSTA_TIMEO 0x10000000 /* Experiencing a timeout */ #define NFSSTA_LOCKTIMEO 0x20000000 /* Experiencing a lockd timeout */ #define NFSSTA_HASSETFSID 0x40000000 /* Has set the fsid */ @@ -860,6 +861,7 @@ void newnfs_realign(struct mbuf **); #define NFSSETWRITEVERF(n) ((n)->nm_state |= NFSSTA_HASWRITEVERF) #define NFSSETHASSETFSID(n) ((n)->nm_state |= NFSSTA_HASSETFSID) #define NFSHASPNFSOPT(n) ((n)->nm_flag & NFSMNT_PNFS) +#define NFSHASSESSPERSIST(n) ((n)->nm_state & NFSSTA_SESSPERSIST) #define NFSHASPNFS(n) ((n)->nm_state & NFSSTA_PNFS) /* Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Sun Apr 29 20:27:44 2012 (r234817) +++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Sun Apr 29 22:01:23 2012 (r234818) @@ -4469,7 +4469,7 @@ int nfsrpc_createsession(struct nfsmount *nmp, struct nfsclsession *sep, uint32_t sequenceid, struct ucred *cred, NFSPROC_T *p) { - uint32_t *tl; + uint32_t crflags, *tl; struct nfsrv_descript nfsd; struct nfsrv_descript *nd = &nfsd; int error, irdcnt; @@ -4480,11 +4480,10 @@ nfsrpc_createsession(struct nfsmount *nm *tl++ = sep->nfsess_clientid.lval[1]; *tl++ = txdr_unsigned(sequenceid); printf("clseq0=0x%x\n",sequenceid); + crflags = (NFSMNT_RDONLY(nmp->nm_mountp) ? 0 : NFSV4CRSESS_PERSIST); if (nfscl_enablecallb != 0 && nfs_numnfscbd > 0) - *tl = txdr_unsigned(NFSV4CRSESS_PERSIST | - NFSV4CRSESS_CONNBACKCHAN); - else - *tl = txdr_unsigned(NFSV4CRSESS_PERSIST); + crflags |= NFSV4CRSESS_CONNBACKCHAN; + *tl = txdr_unsigned(crflags); /* Fill in fore channel attributes. */ NFSM_BUILD(tl, uint32_t *, 7 * NFSX_UNSIGNED); @@ -4528,9 +4527,14 @@ printf("clseq0=0x%x\n",sequenceid); bcopy(tl, sep->nfsess_sessionid, NFSX_V4SESSIONID); tl += NFSX_V4SESSIONID / NFSX_UNSIGNED; sep->nfsess_sequenceid = fxdr_unsigned(uint32_t, *tl++); + crflags = fxdr_unsigned(uint32_t, *tl); printf("clseq=0x%x\n",sep->nfsess_sequenceid); -printf("crfl=0x%x\n",fxdr_unsigned(uint32_t, *tl)); - /* Don't care about replied flags for now. */ +printf("crfl=0x%x\n",crflags); + if ((crflags & NFSV4CRSESS_PERSIST) != 0) { + NFSLOCKMNT(nmp); + nmp->nm_state |= NFSSTA_SESSPERSIST; + NFSUNLOCKMNT(nmp); + } /* Get the fore channel slot count. */ NFSM_DISSECT(tl, uint32_t *, 7 * NFSX_UNSIGNED);