summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2001-09-28 04:37:08 +0000
committerpeter <peter@FreeBSD.org>2001-09-28 04:37:08 +0000
commit562ebdfbed6da83efa5110cabff6bbb6c685cfea (patch)
tree70885e3ccbc8ca40ca489f691745bc22fb96720d /sys/nfsserver
parentd1e3264e13fc0aa3ac602b4919d9a89d613bc315 (diff)
downloadFreeBSD-src-562ebdfbed6da83efa5110cabff6bbb6c685cfea.zip
FreeBSD-src-562ebdfbed6da83efa5110cabff6bbb6c685cfea.tar.gz
Unwind some more macros. NFSMADV() was kinda silly since it was right
next to equivalent m_len adjustments. Move the nfsm_subs.h macros into groups depending on which phase they are used in, since that affects the error recovery requirements. Collect some of the common error checking into a single macro as preparation for unwinding some more. Have nfs_rephead return a value instead of secretly modifying args. Remove some unused function arguments that were being passed around. Clarify nfsm_reply()'s error handling (I hope).
Diffstat (limited to 'sys/nfsserver')
-rw-r--r--sys/nfsserver/nfs.h9
-rw-r--r--sys/nfsserver/nfs_serv.c4
-rw-r--r--sys/nfsserver/nfs_srvcache.c7
-rw-r--r--sys/nfsserver/nfs_srvsock.c14
-rw-r--r--sys/nfsserver/nfs_srvsubs.c14
-rw-r--r--sys/nfsserver/nfs_syscalls.c2
-rw-r--r--sys/nfsserver/nfsm_subs.h114
7 files changed, 70 insertions, 94 deletions
diff --git a/sys/nfsserver/nfs.h b/sys/nfsserver/nfs.h
index 93e56eb..610201b 100644
--- a/sys/nfsserver/nfs.h
+++ b/sys/nfsserver/nfs.h
@@ -346,8 +346,8 @@ extern int nfs_debug;
int nfs_getreq(struct nfsrv_descript *, struct nfsd *, int);
int nfsrv_send(struct socket *, struct sockaddr *, struct mbuf *);
-void nfs_rephead(int, struct nfsrv_descript *, struct nfssvc_sock *,
- int, struct mbuf **, struct mbuf **, caddr_t *);
+struct mbuf *nfs_rephead(int, struct nfsrv_descript *, int, struct mbuf **,
+ caddr_t *);
int nfs_slplock(struct nfssvc_sock *, int);
void nfs_slpunlock(struct nfssvc_sock *);
void nfsm_srvfattr(struct nfsrv_descript *, struct vattr *,
@@ -363,11 +363,10 @@ int nfs_namei(struct nameidata *, fhandle_t *, int,
void nfsm_adj(struct mbuf *, int, int);
int nfsm_mbuftouio(struct mbuf **, struct uio *, int, caddr_t *);
void nfsrv_initcache(void);
-void nfsrv_timer(void*);
+void nfsrv_timer(void *);
int nfsrv_dorec(struct nfssvc_sock *, struct nfsd *,
struct nfsrv_descript **);
-int nfsrv_getcache(struct nfsrv_descript *, struct nfssvc_sock *,
- struct mbuf **);
+int nfsrv_getcache(struct nfsrv_descript *, struct mbuf **);
void nfsrv_updatecache(struct nfsrv_descript *, int, struct mbuf *);
void nfsrv_cleancache(void);
void nfsrv_init(int);
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
index f28d638..f3e0c9a 100644
--- a/sys/nfsserver/nfs_serv.c
+++ b/sys/nfsserver/nfs_serv.c
@@ -1055,7 +1055,7 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
adjust = dpos - mtod(mp, caddr_t);
mp->m_len -= adjust;
if (mp->m_len > 0 && adjust > 0)
- NFSMADV(mp, adjust);
+ mp->m_data += adjust;
}
if (zeroing)
mp->m_len = 0;
@@ -1273,7 +1273,7 @@ nfsrv_writegather(struct nfsrv_descript **ndp, struct nfssvc_sock *slp,
adjust = dpos - mtod(mp, caddr_t);
mp->m_len -= adjust;
if (mp->m_len > 0 && adjust > 0)
- NFSMADV(mp, adjust);
+ mp->m_data += adjust;
}
if (zeroing)
mp->m_len = 0;
diff --git a/sys/nfsserver/nfs_srvcache.c b/sys/nfsserver/nfs_srvcache.c
index 4bab5d0..2222ffa 100644
--- a/sys/nfsserver/nfs_srvcache.c
+++ b/sys/nfsserver/nfs_srvcache.c
@@ -150,8 +150,7 @@ nfsrv_initcache(void)
* Update/add new request at end of lru list
*/
int
-nfsrv_getcache(struct nfsrv_descript *nd, struct nfssvc_sock *slp,
- struct mbuf **repp)
+nfsrv_getcache(struct nfsrv_descript *nd, struct mbuf **repp)
{
struct nfsrvcache *rp;
struct mbuf *mb;
@@ -188,8 +187,8 @@ loop:
ret = RC_DROPIT;
} else if (rp->rc_flag & RC_REPSTATUS) {
nfsrvstats.srvcache_nonidemdonehits++;
- nfs_rephead(0, nd, slp, rp->rc_status,
- repp, &mb, &bpos);
+ *repp = nfs_rephead(0, nd, rp->rc_status,
+ &mb, &bpos);
ret = RC_REPLY;
} else if (rp->rc_flag & RC_REPMBUF) {
nfsrvstats.srvcache_nonidemdonehits++;
diff --git a/sys/nfsserver/nfs_srvsock.c b/sys/nfsserver/nfs_srvsock.c
index cb2276d..1483396 100644
--- a/sys/nfsserver/nfs_srvsock.c
+++ b/sys/nfsserver/nfs_srvsock.c
@@ -136,9 +136,9 @@ int (*nfsrv3_procs[NFS_NPROCS])(struct nfsrv_descript *nd,
* Generate the rpc reply header
* siz arg. is used to decide if adding a cluster is worthwhile
*/
-void
-nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
- int err, struct mbuf **mrq, struct mbuf **mbp, caddr_t *bposp)
+struct mbuf *
+nfs_rephead(int siz, struct nfsrv_descript *nd, int err,
+ struct mbuf **mbp, caddr_t *bposp)
{
u_int32_t *tl;
struct mbuf *mreq;
@@ -148,7 +148,6 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
nd->nd_repstat = err;
if (err && (nd->nd_flag & ND_NFSV3) == 0) /* XXX recheck */
siz = 0;
-
MGETHDR(mreq, M_TRYWAIT, MT_DATA);
mb = mreq;
/*
@@ -179,7 +178,6 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
}
} else {
*tl++ = rpc_msgaccepted;
-
/*
* Send a RPCAUTH_NULL verifier - no Kerberos.
*/
@@ -211,15 +209,13 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
*tl = 0;
}
break;
- };
+ }
}
-
- if (mrq != NULL)
- *mrq = mreq;
*mbp = mb;
*bposp = bpos;
if (err != 0 && err != NFSERR_RETVOID)
nfsrvstats.srvrpc_errs++;
+ return mreq;
}
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c
index c47de7d..dc329c2 100644
--- a/sys/nfsserver/nfs_srvsubs.c
+++ b/sys/nfsserver/nfs_srvsubs.c
@@ -1376,17 +1376,3 @@ nfsm_srvsattr_xx(struct vattr *a,
}
return 0;
}
-
-void
-nfs_rephead_xx(int s, struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
- int error, struct mbuf **mrq, struct mbuf **mb,
- struct mbuf **mreq, struct mbuf **mrep, caddr_t *bpos)
-{
-
- nfs_rephead(s, nfsd, slp, error, mrq, mb, bpos);
- if (*mrep != NULL) {
- m_freem(*mrep);
- *mrep = NULL;
- }
- *mreq = *mrq;
-}
diff --git a/sys/nfsserver/nfs_syscalls.c b/sys/nfsserver/nfs_syscalls.c
index be8fc69..17f90f7 100644
--- a/sys/nfsserver/nfs_syscalls.c
+++ b/sys/nfsserver/nfs_syscalls.c
@@ -376,7 +376,7 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td)
/*
* Check to see if authorization is needed.
*/
- cacherep = nfsrv_getcache(nd, slp, &mreq);
+ cacherep = nfsrv_getcache(nd, &mreq);
if (nfs_privport) {
/* Check if source port is privileged */
diff --git a/sys/nfsserver/nfsm_subs.h b/sys/nfsserver/nfsm_subs.h
index 2f60521..d39b207 100644
--- a/sys/nfsserver/nfsm_subs.h
+++ b/sys/nfsserver/nfsm_subs.h
@@ -55,10 +55,6 @@
*/
#define M_HASCL(m) ((m)->m_flags & M_EXT)
-#define NFSMADV(m, s) \
- do { \
- (m)->m_data += (s); \
- } while (0)
#define NFSMSIZ(m) ((M_HASCL(m))?MCLBYTES: \
(((m)->m_flags & M_PKTHDR)?MHLEN:MLEN))
@@ -76,36 +72,19 @@
*/
-/* Helpers for macros */
-void nfsm_srvfhtom_xx(fhandle_t *f, int v3, u_int32_t **tl, struct mbuf **mb,
- caddr_t *bpos);
-void nfsm_srvpostop_fh_xx(fhandle_t *f, u_int32_t **tl, struct mbuf **mb,
- caddr_t *bpos);
+
+/* ************************************* */
+/* Dissection phase macros */
+
int nfsm_srvstrsiz_xx(int *s, int m, u_int32_t **tl, struct mbuf **md,
caddr_t *dpos);
int nfsm_srvnamesiz_xx(int *s, u_int32_t **tl, struct mbuf **md,
caddr_t *dpos);
-void nfs_rephead_xx(int s, struct nfsrv_descript *nfsd,
- struct nfssvc_sock *slp, int error, struct mbuf **mrq,
- struct mbuf **mb, struct mbuf **mreq, struct mbuf **mrep,
- caddr_t *bpos);
int nfsm_srvmtofh_xx(fhandle_t *f, struct nfsrv_descript *nfsd,
u_int32_t **tl, struct mbuf **md, caddr_t *dpos);
-void nfsm_clget_xx(u_int32_t **tl, struct mbuf *mb, struct mbuf **mp,
- char **bp, char **be, caddr_t bpos);
int nfsm_srvsattr_xx(struct vattr *a, u_int32_t **tl, struct mbuf **md,
caddr_t *dpos);
-#define nfsm_srvfhtom(f, v3) \
-do { \
- nfsm_srvfhtom_xx((f), (v3), &tl, &mb, &bpos); \
-} while (0)
-
-#define nfsm_srvpostop_fh(f) \
-do { \
- nfsm_srvpostop_fh_xx((f), &tl, &mb, &bpos); \
-} while (0)
-
#define nfsm_srvstrsiz(s, m) \
do { \
int t1; \
@@ -126,20 +105,6 @@ do { \
} \
} while (0)
-#define nfsm_reply(s) \
-do { \
- nfs_rephead_xx((s), nfsd, slp, error, mrq, &mb, &mreq, &mrep, &bpos); \
- if (error && error == EBADRPC) { \
- error = 0; \
- goto nfsmout; \
- } \
-} while (0)
-
-#define nfsm_writereply(s) \
-do { \
- nfs_rephead((s), nfsd, slp, error, &mreq, &mb, &bpos); \
-} while (0)
-
#define nfsm_srvmtofh(f) \
do { \
int t1; \
@@ -150,26 +115,7 @@ do { \
} \
} while (0)
-#define nfsm_clget \
-do { \
- nfsm_clget_xx(&tl, mb, &mp, &bp, &be, bpos); \
-} while (0)
-
-#define nfsm_srvfillattr(a, f) \
-do { \
- nfsm_srvfattr(nfsd, (a), (f)); \
-} while (0)
-
-#define nfsm_srvwcc_data(br, b, ar, a) \
-do { \
- nfsm_srvwcc(nfsd, (br), (b), (ar), (a), &mb, &bpos); \
-} while (0)
-
-#define nfsm_srvpostop_attr(r, a) \
-do { \
- nfsm_srvpostopattr(nfsd, (r), (a), &mb, &bpos); \
-} while (0)
-
+/* XXX why is this different? */
#define nfsm_srvsattr(a) \
do { \
int t1; \
@@ -182,4 +128,54 @@ do { \
} \
} while (0)
+/* ************************************* */
+/* Prepare the reply */
+
+#define nfsm_reply(s) \
+do { \
+ if (mrep != NULL) { \
+ m_freem(mrep); \
+ mrep = NULL; \
+ } \
+ if (error == EBADRPC) { \
+ error = 0; \
+ goto nfsmout; \
+ } \
+ mreq = nfs_rephead((s), nfsd, error, &mb, &bpos); \
+ *mrq = mreq; \
+} while (0)
+
+#define nfsm_writereply(s) \
+do { \
+ mreq = nfs_rephead((s), nfsd, error, &mb, &bpos); \
+} while(0)
+
+/* ************************************* */
+/* Reply phase macros - add additional reply info */
+
+void nfsm_srvfhtom_xx(fhandle_t *f, int v3, u_int32_t **tl, struct mbuf **mb,
+ caddr_t *bpos);
+void nfsm_srvpostop_fh_xx(fhandle_t *f, u_int32_t **tl, struct mbuf **mb,
+ caddr_t *bpos);
+void nfsm_clget_xx(u_int32_t **tl, struct mbuf *mb, struct mbuf **mp,
+ char **bp, char **be, caddr_t bpos);
+
+#define nfsm_srvfhtom(f, v3) \
+ nfsm_srvfhtom_xx((f), (v3), &tl, &mb, &bpos)
+
+#define nfsm_srvpostop_fh(f) \
+ nfsm_srvpostop_fh_xx((f), &tl, &mb, &bpos)
+
+#define nfsm_srvwcc_data(br, b, ar, a) \
+ nfsm_srvwcc(nfsd, (br), (b), (ar), (a), &mb, &bpos)
+
+#define nfsm_srvpostop_attr(r, a) \
+ nfsm_srvpostopattr(nfsd, (r), (a), &mb, &bpos)
+
+#define nfsm_srvfillattr(a, f) \
+ nfsm_srvfattr(nfsd, (a), (f))
+
+#define nfsm_clget \
+ nfsm_clget_xx(&tl, mb, &mp, &bp, &be, bpos)
+
#endif
OpenPOWER on IntegriCloud