svn commit: r229051 - in projects/nfsv4.1-client/sys/fs: nfs
nfsclient
Rick Macklem
rmacklem at FreeBSD.org
Sat Dec 31 00:35:12 UTC 2011
Author: rmacklem
Date: Sat Dec 31 00:35:11 2011
New Revision: 229051
URL: http://svn.freebsd.org/changeset/base/229051
Log:
Add an argument to nfscl_reqstart() that is a pointer to the
new session structure, so that it can optionally override use
of the default one in the nfsclclient structure. For now, this
new argument is always passed in as NULL to maintain default
behaviour.
Modified:
projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
projects/nfsv4.1-client/sys/fs/nfs/nfscl.h
projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
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 Sat Dec 31 00:12:51 2011 (r229050)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h Sat Dec 31 00:35:11 2011 (r229051)
@@ -69,6 +69,7 @@ struct nfsclowner;
struct nfsclopen;
struct nfsclopenhead;
struct nfsclclient;
+struct nfsclsession;
struct nfscllockowner;
struct nfscllock;
struct nfscldeleg;
@@ -266,7 +267,7 @@ void nfsv4_freeslot(struct nfsclsession
/* nfs_clcomsubs.c */
void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int);
void nfscl_reqstart(struct nfsrv_descript *, int, struct nfsmount *,
- u_int8_t *, int, u_int32_t **);
+ u_int8_t *, int, u_int32_t **, struct nfsclsession *);
nfsuint64 *nfscl_getcookie(struct nfsnode *, off_t off, int);
void nfscl_fillsattr(struct nfsrv_descript *, struct vattr *,
vnode_t, int, u_int32_t);
Modified: projects/nfsv4.1-client/sys/fs/nfs/nfscl.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfscl.h Sat Dec 31 00:12:51 2011 (r229050)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfscl.h Sat Dec 31 00:35:11 2011 (r229051)
@@ -49,7 +49,7 @@ struct nfsv4node {
*/
#define NFSCL_REQSTART(n, p, v) \
nfscl_reqstart((n), (p), VFSTONFS((v)->v_mount), \
- VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL)
+ VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL, NULL)
/*
* These two macros convert between a lease duration and renew interval.
Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c Sat Dec 31 00:12:51 2011 (r229050)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clcomsubs.c Sat Dec 31 00:35:11 2011 (r229051)
@@ -121,7 +121,7 @@ static int nfs_bigrequest[NFSV41_NPROCS]
*/
APPLESTATIC void
nfscl_reqstart(struct nfsrv_descript *nd, int procnum, struct nfsmount *nmp,
- u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp)
+ u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp, struct nfsclsession *sep)
{
struct mbuf *mb;
u_int32_t *tl;
@@ -186,7 +186,12 @@ nfscl_reqstart(struct nfsrv_descript *nd
nfsv4_opflag[nfsv4_opmap[procnum].op].needsseq > 0) {
NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
*tl = txdr_unsigned(NFSV4OP_SEQUENCE);
- nfscl_setsequence(nd, nmp, nfs_bigreply[procnum]);
+ if (sep == NULL)
+ nfsv4_setsequence(nd, &nmp->nm_clp->nfsc_sess,
+ nfs_bigreply[procnum]);
+ else
+ nfsv4_setsequence(nd, sep,
+ nfs_bigreply[procnum]);
}
if (nfsv4_opflag[nfsv4_opmap[procnum].op].needscfh > 0) {
NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Sat Dec 31 00:12:51 2011 (r229050)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c Sat Dec 31 00:35:11 2011 (r229051)
@@ -341,7 +341,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vno
dp = *dpp;
*dpp = NULL;
- nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL);
+ nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, 5 * NFSX_UNSIGNED);
*tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid);
*tl++ = txdr_unsigned(mode & NFSV4OPEN_ACCESSBOTH);
@@ -687,7 +687,7 @@ nfsrpc_closerpc(struct nfsrv_descript *n
int error;
nfscl_reqstart(nd, NFSPROC_CLOSE, nmp, op->nfso_fh,
- op->nfso_fhlen, NULL);
+ op->nfso_fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID);
*tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid);
*tl++ = op->nfso_stateid.seqid;
@@ -726,7 +726,7 @@ nfsrpc_openconfirm(vnode_t vp, u_int8_t
nmp = VFSTONFS(vnode_mount(vp));
if (NFSHASNFSV4N(nmp))
return (0); /* No confirmation for NFSv4.1. */
- nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL);
+ nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID);
*tl++ = op->nfso_stateid.seqid;
*tl++ = op->nfso_stateid.other[0];
@@ -781,7 +781,7 @@ if (error) printf("exch=%d\n",error);
if (error) printf("aft crs=%d\n",error);
return (error);
}
- nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL);
+ 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++);
@@ -850,7 +850,8 @@ if (error) printf("aft crs=%d\n",error);
/*
* and confirm it.
*/
- nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL,
+ NULL);
NFSM_BUILD(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
*tl++ = clp->nfsc_clientid.lval[0];
*tl++ = clp->nfsc_clientid.lval[1];
@@ -865,7 +866,7 @@ if (error) printf("aft crs=%d\n",error);
nd->nd_mrep = NULL;
if (nd->nd_repstat == 0) {
nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, nmp->nm_fh,
- nmp->nm_fhsize, NULL);
+ nmp->nm_fhsize, NULL, NULL);
NFSZERO_ATTRBIT(&attrbits);
NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_LEASETIME);
(void) nfsrv_putattrbit(nd, &attrbits);
@@ -932,7 +933,7 @@ nfsrpc_getattrnovp(struct nfsmount *nmp,
int error, vers = NFS_VER2;
nfsattrbit_t attrbits;
- nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL);
+ nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL);
if (nd->nd_flag & ND_NFSV4) {
vers = NFS_VER4;
NFSGETATTR_ATTRBIT(&attrbits);
@@ -3715,7 +3716,7 @@ nfsrpc_locku(struct nfsrv_descript *nd,
int error;
nfscl_reqstart(nd, NFSPROC_LOCKU, nmp, lp->nfsl_open->nfso_fh,
- lp->nfsl_open->nfso_fhlen, NULL);
+ lp->nfsl_open->nfso_fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + 6 * NFSX_UNSIGNED);
*tl++ = txdr_unsigned(type);
*tl = txdr_unsigned(lp->nfsl_seqid);
@@ -3763,7 +3764,7 @@ nfsrpc_lock(struct nfsrv_descript *nd, s
int error, size;
uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX];
- nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL);
+ nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED);
if (type == F_RDLCK)
*tl++ = txdr_unsigned(NFSV4LOCKT_READ);
@@ -4025,7 +4026,7 @@ nfsrpc_renew(struct nfsclclient *clp, st
nmp = clp->nfsc_nmp;
if (nmp == NULL)
return (0);
- nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL, NULL);
if (!NFSHASNFSV4N(nmp)) {
/* NFSv4.1 just uses a Sequence Op and not a Renew. */
NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
@@ -4056,10 +4057,12 @@ nfsrpc_rellockown(struct nfsmount *nmp,
if (NFSHASNFSV4N(nmp)) {
/* For NFSv4.1, do a FreeStateID. */
- nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL,
+ NULL);
nfsm_stateidtom(nd, &lp->nfsl_stateid, NFSSTATEID_PUTSTATEID);
} else {
- nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL,
+ NULL);
NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
*tl++ = nmp->nm_clp->nfsc_clientid.lval[0];
*tl = nmp->nm_clp->nfsc_clientid.lval[1];
@@ -4091,7 +4094,7 @@ nfsrpc_getdirpath(struct nfsmount *nmp,
int error, cnt, len, setnil;
u_int32_t *opcntp;
- nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp);
+ nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp, NULL);
cp = dirpath;
cnt = 0;
do {
@@ -4159,7 +4162,7 @@ nfsrpc_delegreturn(struct nfscldeleg *dp
int error;
nfscl_reqstart(nd, NFSPROC_DELEGRETURN, nmp, dp->nfsdl_fh,
- dp->nfsdl_fhlen, NULL);
+ dp->nfsdl_fhlen, NULL, NULL);
NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID);
*tl++ = dp->nfsdl_stateid.seqid;
*tl++ = dp->nfsdl_stateid.other[0];
@@ -4264,7 +4267,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp,
int error;
static uint32_t rev = 0;
- nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL);
+ 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++);
@@ -4314,7 +4317,7 @@ nfsrpc_createsession(struct nfsmount *nm
struct nfsrv_descript *nd = &nfsd;
int error, irdcnt;
- nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED);
*tl++ = clp->nfsc_clientid.lval[0];
*tl++ = clp->nfsc_clientid.lval[1];
@@ -4408,7 +4411,7 @@ nfsrpc_destroysession(struct nfsmount *n
struct nfsrv_descript *nd = &nfsd;
int error;
- nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID);
bcopy(clp->nfsc_sessionid, tl, NFSX_V4SESSIONID);
nd->nd_flag |= ND_USEGSSNAME;
@@ -4422,7 +4425,7 @@ nfsrpc_destroysession(struct nfsmount *n
}
/*
- * Do the NFSv4.1 Destroy Session.
+ * Do the NFSv4.1 Destroy Client.
*/
int
nfsrpc_destroyclient(struct nfsmount *nmp, struct nfsclclient *clp,
@@ -4433,7 +4436,7 @@ nfsrpc_destroyclient(struct nfsmount *nm
struct nfsrv_descript *nd = &nfsd;
int error;
- nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL);
+ nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED);
*tl++ = clp->nfsc_clientid.lval[0];
*tl = clp->nfsc_clientid.lval[1];
More information about the svn-src-projects
mailing list