4.4BSD snapshot (revision 8.1); add 1993 to copyright
[unix-history] / usr / src / sys / nfs / nfsm_subs.h
index 6a0285b..1a81951 100644 (file)
@@ -7,7 +7,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)nfsm_subs.h 7.10 (Berkeley) %G%
+ *     @(#)nfsm_subs.h 8.1 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
 extern struct mbuf *nfsm_reqh();
 
 #define        M_HASCL(m)      ((m)->m_flags & M_EXT)
 extern struct mbuf *nfsm_reqh();
 
 #define        M_HASCL(m)      ((m)->m_flags & M_EXT)
-#define        NFSMGETHDR(m) \
-               MGETHDR(m, M_WAIT, MT_DATA); \
-               (m)->m_pkthdr.len = 0; \
-               (m)->m_pkthdr.rcvif = (struct ifnet *)0
 #define        NFSMINOFF(m) \
                if (M_HASCL(m)) \
                        (m)->m_data = (m)->m_ext.ext_buf; \
 #define        NFSMINOFF(m) \
                if (M_HASCL(m)) \
                        (m)->m_data = (m)->m_ext.ext_buf; \
+               else if ((m)->m_flags & M_PKTHDR) \
+                       (m)->m_data = (m)->m_pktdat; \
                else \
                        (m)->m_data = (m)->m_dat
 #define        NFSMADV(m, s)   (m)->m_data += (s)
                else \
                        (m)->m_data = (m)->m_dat
 #define        NFSMADV(m, s)   (m)->m_data += (s)
@@ -48,10 +46,8 @@ extern struct mbuf *nfsm_reqh();
  * unions.
  */
 
  * unions.
  */
 
-#ifndef lint
 #define        nfsm_build(a,c,s) \
 #define        nfsm_build(a,c,s) \
-               t1 = NFSMSIZ(mb); \
-               if ((s) > (t1-mb->m_len)) { \
+               { if ((s) > M_TRAILINGSPACE(mb)) { \
                        MGET(mb2, M_WAIT, MT_DATA); \
                        if ((s) > MLEN) \
                                panic("build > MLEN"); \
                        MGET(mb2, M_WAIT, MT_DATA); \
                        if ((s) > MLEN) \
                                panic("build > MLEN"); \
@@ -62,24 +58,10 @@ extern struct mbuf *nfsm_reqh();
                } \
                (a) = (c)(bpos); \
                mb->m_len += (s); \
                } \
                (a) = (c)(bpos); \
                mb->m_len += (s); \
-               bpos += (s)
-#else /* lint */
-#define        nfsm_build(a,c,s) \
-               t1 = NFSMSIZ(mb); \
-               if ((s) > (t1-mb->m_len)) { \
-                       MGET(mb2, M_WAIT, MT_DATA); \
-                       mb->m_next = mb2; \
-                       mb = mb2; \
-                       mb->m_len = 0; \
-                       bpos = mtod(mb, caddr_t); \
-               } \
-               (a) = (c)(bpos); \
-               mb->m_len += (s); \
-               bpos += (s)
-#endif /* lint */
+               bpos += (s); }
 
 
-#define        nfsm_disect(a,c,s) \
-               t1 = mtod(md, caddr_t)+md->m_len-dpos; \
+#define        nfsm_dissect(a,c,s) \
+               t1 = mtod(md, caddr_t)+md->m_len-dpos; \
                if (t1 >= (s)) { \
                        (a) = (c)(dpos); \
                        dpos += (s); \
                if (t1 >= (s)) { \
                        (a) = (c)(dpos); \
                        dpos += (s); \
@@ -88,10 +70,10 @@ extern struct mbuf *nfsm_reqh();
                        goto nfsmout; \
                } else { \
                        (a) = (c)cp2; \
                        goto nfsmout; \
                } else { \
                        (a) = (c)cp2; \
-               }
+               } }
 
 
-#define        nfsm_disecton(a,c,s) \
-               t1 = mtod(md, caddr_t)+md->m_len-dpos; \
+#define        nfsm_dissecton(a,c,s) \
+               t1 = mtod(md, caddr_t)+md->m_len-dpos; \
                if (t1 >= (s)) { \
                        (a) = (c)(dpos); \
                        dpos += (s); \
                if (t1 >= (s)) { \
                        (a) = (c)(dpos); \
                        dpos += (s); \
@@ -100,7 +82,7 @@ extern struct mbuf *nfsm_reqh();
                        goto nfsmout; \
                } else { \
                        (a) = (c)cp2; \
                        goto nfsmout; \
                } else { \
                        (a) = (c)cp2; \
-               }
+               } }
 
 #define nfsm_fhtom(v) \
                nfsm_build(cp,caddr_t,NFSX_FH); \
 
 #define nfsm_fhtom(v) \
                nfsm_build(cp,caddr_t,NFSX_FH); \
@@ -112,7 +94,7 @@ extern struct mbuf *nfsm_reqh();
 
 #define nfsm_mtofh(d,v) \
                { struct nfsnode *np; nfsv2fh_t *fhp; \
 
 #define nfsm_mtofh(d,v) \
                { struct nfsnode *np; nfsv2fh_t *fhp; \
-               nfsm_disect(fhp,nfsv2fh_t *,NFSX_FH); \
+               nfsm_dissect(fhp,nfsv2fh_t *,NFSX_FH); \
                if (error = nfs_nget((d)->v_mount, fhp, &np)) { \
                        m_freem(mrep); \
                        goto nfsmout; \
                if (error = nfs_nget((d)->v_mount, fhp, &np)) { \
                        m_freem(mrep); \
                        goto nfsmout; \
@@ -130,19 +112,19 @@ extern struct mbuf *nfsm_reqh();
                (v) = tvp; }
 
 #define        nfsm_strsiz(s,m) \
                (v) = tvp; }
 
 #define        nfsm_strsiz(s,m) \
-               nfsm_disect(p,u_long *,NFSX_UNSIGNED); \
-               if (((s) = fxdr_unsigned(long,*p)) > (m)) { \
+               { nfsm_dissect(tl,u_long *,NFSX_UNSIGNED); \
+               if (((s) = fxdr_unsigned(long,*tl)) > (m)) { \
                        m_freem(mrep); \
                        error = EBADRPC; \
                        goto nfsmout; \
                        m_freem(mrep); \
                        error = EBADRPC; \
                        goto nfsmout; \
-               }
+               } }
 
 #define        nfsm_srvstrsiz(s,m) \
 
 #define        nfsm_srvstrsiz(s,m) \
-               nfsm_disect(p,u_long *,NFSX_UNSIGNED); \
-               if (((s) = fxdr_unsigned(long,*p)) > (m) || (s) <= 0) { \
+               { nfsm_dissect(tl,u_long *,NFSX_UNSIGNED); \
+               if (((s) = fxdr_unsigned(long,*tl)) > (m) || (s) <= 0) { \
                        error = EBADRPC; \
                        nfsm_reply(0); \
                        error = EBADRPC; \
                        nfsm_reply(0); \
-               }
+               } }
 
 #define nfsm_mtouio(p,s) \
                if ((s) > 0 && \
 
 #define nfsm_mtouio(p,s) \
                if ((s) > 0 && \
@@ -157,20 +139,17 @@ extern struct mbuf *nfsm_reqh();
                        goto nfsmout; \
                }
 
                        goto nfsmout; \
                }
 
-#define        nfsm_reqhead(a,c,s) \
-               if ((mreq = nfsm_reqh(nfs_prog,nfs_vers,(a),(c),(s),&bpos,&mb,&xid)) == NULL) { \
-                       error = ENOBUFS; \
-                       goto nfsmout; \
-               }
+#define        nfsm_reqhead(v,a,s) \
+               mb = mreq = nfsm_reqh((v),(a),(s),&bpos)
 
 #define nfsm_reqdone   m_freem(mrep); \
                nfsmout: 
 
 #define nfsm_rndup(a)  (((a)+3)&(~0x3))
 
 
 #define nfsm_reqdone   m_freem(mrep); \
                nfsmout: 
 
 #define nfsm_rndup(a)  (((a)+3)&(~0x3))
 
-#define        nfsm_request(v, t, p, h)        \
-               if (error = nfs_request((v), mreq, xid, (t), (p), (h), \
-                  (v)->v_mount, &mrep, &md, &dpos)) \
+#define        nfsm_request(v, t, p, c)        \
+               if (error = nfs_request((v), mreq, (t), (p), \
+                  (c), &mrep, &md, &dpos)) \
                        goto nfsmout
 
 #define        nfsm_strtom(a,s,m) \
                        goto nfsmout
 
 #define        nfsm_strtom(a,s,m) \
@@ -180,11 +159,11 @@ extern struct mbuf *nfsm_reqh();
                        goto nfsmout; \
                } \
                t2 = nfsm_rndup(s)+NFSX_UNSIGNED; \
                        goto nfsmout; \
                } \
                t2 = nfsm_rndup(s)+NFSX_UNSIGNED; \
-               if(t2<=(NFSMSIZ(mb)-mb->m_len)){ \
-                       nfsm_build(p,u_long *,t2); \
-                       *p++ = txdr_unsigned(s); \
-                       *(p+((t2>>2)-2)) = 0; \
-                       bcopy((caddr_t)(a), (caddr_t)p, (s)); \
+               if (t2 <= M_TRAILINGSPACE(mb)) { \
+                       nfsm_build(tl,u_long *,t2); \
+                       *tl++ = txdr_unsigned(s); \
+                       *(tl+((t2>>2)-2)) = 0; \
+                       bcopy((caddr_t)(a), (caddr_t)tl, (s)); \
                } else if (error = nfsm_strtmbuf(&mb, &bpos, (a), (s))) { \
                        m_freem(mreq); \
                        goto nfsmout; \
                } else if (error = nfsm_strtmbuf(&mb, &bpos, (a), (s))) { \
                        m_freem(mreq); \
                        goto nfsmout; \
@@ -194,34 +173,20 @@ extern struct mbuf *nfsm_reqh();
                nfsmout: \
                return(error)
 
                nfsmout: \
                return(error)
 
-#ifndef lint
-#define        nfsm_reply(s) \
-               { \
-               *repstat = error; \
-               if (error) \
-                       nfs_rephead(0, xid, error, mrq, &mb, &bpos); \
-               else \
-                       nfs_rephead((s), xid, error, mrq, &mb, &bpos); \
-               m_freem(mrep); \
-               mreq = *mrq; \
-               if (error) \
-                       return(0); \
-               }
-#else  /* lint */
 #define        nfsm_reply(s) \
                { \
 #define        nfsm_reply(s) \
                { \
-               *repstat = error; \
+               nfsd->nd_repstat = error; \
                if (error) \
                if (error) \
-                       nfs_rephead(0, xid, error, mrq, &mb, &bpos); \
+                  (void) nfs_rephead(0, nfsd, error, cache, &frev, \
+                       mrq, &mb, &bpos); \
                else \
                else \
-                       nfs_rephead((s), xid, error, mrq, &mb, &bpos); \
+                  (void) nfs_rephead((s), nfsd, error, cache, &frev, \
+                       mrq, &mb, &bpos); \
                m_freem(mrep); \
                mreq = *mrq; \
                m_freem(mrep); \
                mreq = *mrq; \
-               mrep = mreq; \
                if (error) \
                        return(0); \
                }
                if (error) \
                        return(0); \
                }
-#endif /* lint */
 
 #define        nfsm_adv(s) \
                t1 = mtod(md, caddr_t)+md->m_len-dpos; \
 
 #define        nfsm_adv(s) \
                t1 = mtod(md, caddr_t)+md->m_len-dpos; \
@@ -233,24 +198,22 @@ extern struct mbuf *nfsm_reqh();
                }
 
 #define nfsm_srvmtofh(f) \
                }
 
 #define nfsm_srvmtofh(f) \
-               nfsm_disecton(p, u_long *, NFSX_FH); \
-               bcopy((caddr_t)p, (caddr_t)f, NFSX_FH)
+               nfsm_dissecton(tl, u_long *, NFSX_FH); \
+               bcopy((caddr_t)tl, (caddr_t)f, NFSX_FH)
 
 #define        nfsm_clget \
                if (bp >= be) { \
 
 #define        nfsm_clget \
                if (bp >= be) { \
+                       if (mp == mb) \
+                               mp->m_len += bp-bpos; \
                        MGET(mp, M_WAIT, MT_DATA); \
                        MCLGET(mp, M_WAIT); \
                        mp->m_len = NFSMSIZ(mp); \
                        MGET(mp, M_WAIT, MT_DATA); \
                        MCLGET(mp, M_WAIT); \
                        mp->m_len = NFSMSIZ(mp); \
-                       if (mp3 == NULL) \
-                               mp3 = mp2 = mp; \
-                       else { \
-                               mp2->m_next = mp; \
-                               mp2 = mp; \
-                       } \
+                       mp2->m_next = mp; \
+                       mp2 = mp; \
                        bp = mtod(mp, caddr_t); \
                        be = bp+mp->m_len; \
                } \
                        bp = mtod(mp, caddr_t); \
                        be = bp+mp->m_len; \
                } \
-               p = (u_long *)bp
+               tl = (u_long *)bp
 
 #define        nfsm_srvfillattr \
        fp->fa_type = vtonfs_type(vap->va_type); \
 
 #define        nfsm_srvfillattr \
        fp->fa_type = vtonfs_type(vap->va_type); \
@@ -258,18 +221,35 @@ extern struct mbuf *nfsm_reqh();
        fp->fa_nlink = txdr_unsigned(vap->va_nlink); \
        fp->fa_uid = txdr_unsigned(vap->va_uid); \
        fp->fa_gid = txdr_unsigned(vap->va_gid); \
        fp->fa_nlink = txdr_unsigned(vap->va_nlink); \
        fp->fa_uid = txdr_unsigned(vap->va_uid); \
        fp->fa_gid = txdr_unsigned(vap->va_gid); \
-       fp->fa_size = txdr_unsigned(vap->va_size); \
-       fp->fa_blocksize = txdr_unsigned(vap->va_blocksize); \
-       if (vap->va_type == VFIFO) \
-               fp->fa_rdev = 0xffffffff; \
-       else \
-               fp->fa_rdev = txdr_unsigned(vap->va_rdev); \
-       fp->fa_blocks = txdr_unsigned(vap->va_bytes / NFS_FABLKSIZE); \
-       fp->fa_fsid = txdr_unsigned(vap->va_fsid); \
-       fp->fa_fileid = txdr_unsigned(vap->va_fileid); \
-       fp->fa_atime.tv_sec = txdr_unsigned(vap->va_atime.tv_sec); \
-       fp->fa_atime.tv_usec = txdr_unsigned(vap->va_flags); \
-       txdr_time(&vap->va_mtime, &fp->fa_mtime); \
-       fp->fa_ctime.tv_sec = txdr_unsigned(vap->va_ctime.tv_sec); \
-       fp->fa_ctime.tv_usec = txdr_unsigned(vap->va_gen)
+       if (nfsd->nd_nqlflag == NQL_NOVAL) { \
+               fp->fa_nfsblocksize = txdr_unsigned(vap->va_blocksize); \
+               if (vap->va_type == VFIFO) \
+                       fp->fa_nfsrdev = 0xffffffff; \
+               else \
+                       fp->fa_nfsrdev = txdr_unsigned(vap->va_rdev); \
+               fp->fa_nfsfsid = txdr_unsigned(vap->va_fsid); \
+               fp->fa_nfsfileid = txdr_unsigned(vap->va_fileid); \
+               fp->fa_nfssize = txdr_unsigned(vap->va_size); \
+               fp->fa_nfsblocks = txdr_unsigned(vap->va_bytes / NFS_FABLKSIZE); \
+               txdr_nfstime(&vap->va_atime, &fp->fa_nfsatime); \
+               txdr_nfstime(&vap->va_mtime, &fp->fa_nfsmtime); \
+               fp->fa_nfsctime.nfs_sec = txdr_unsigned(vap->va_ctime.ts_sec); \
+               fp->fa_nfsctime.nfs_usec = txdr_unsigned(vap->va_gen); \
+       } else { \
+               fp->fa_nqblocksize = txdr_unsigned(vap->va_blocksize); \
+               if (vap->va_type == VFIFO) \
+                       fp->fa_nqrdev = 0xffffffff; \
+               else \
+                       fp->fa_nqrdev = txdr_unsigned(vap->va_rdev); \
+               fp->fa_nqfsid = txdr_unsigned(vap->va_fsid); \
+               fp->fa_nqfileid = txdr_unsigned(vap->va_fileid); \
+               txdr_hyper(&vap->va_size, &fp->fa_nqsize); \
+               txdr_hyper(&vap->va_bytes, &fp->fa_nqbytes); \
+               txdr_nqtime(&vap->va_atime, &fp->fa_nqatime); \
+               txdr_nqtime(&vap->va_mtime, &fp->fa_nqmtime); \
+               txdr_nqtime(&vap->va_ctime, &fp->fa_nqctime); \
+               fp->fa_nqflags = txdr_unsigned(vap->va_flags); \
+               fp->fa_nqgen = txdr_unsigned(vap->va_gen); \
+               txdr_hyper(&vap->va_filerev, &fp->fa_nqfilerev); \
+       }