BSD 4_3_Reno release
[unix-history] / usr / src / sys / kern / uipc_mbuf.c
index 6e6807d..ba17d3f 100644 (file)
@@ -1,23 +1,26 @@
 /*
 /*
+ * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
  * All rights reserved.
  *
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Redistribution is only permitted until one year after the first shipment
+ * of 4.4BSD by the Regents.  Otherwise, redistribution and use in source and
+ * binary forms are permitted provided that: (1) source distributions retain
+ * this entire copyright notice and comment, and (2) distributions including
+ * binaries display the following acknowledgement:  This product includes
+ * software developed by the University of California, Berkeley and its
+ * contributors'' in the documentation or other materials provided with the
+ * distribution and in all advertising materials mentioning features or use
+ * of this software.  Neither the name of the University nor the names of
+ * its contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  *
- *     @(#)uipc_mbuf.c 7.12 (Berkeley) %G%
+ *     @(#)uipc_mbuf.c 7.17 (Berkeley) 7/25/90
  */
 
 #include "param.h"
  */
 
 #include "param.h"
-#include "dir.h"
 #include "user.h"
 #include "proc.h"
 #include "cmap.h"
 #include "user.h"
 #include "proc.h"
 #include "cmap.h"
@@ -37,7 +40,7 @@ mbinit()
        int s;
 
 #if MCLBYTES < 4096
        int s;
 
 #if MCLBYTES < 4096
-#define NCL_INIT       (4096/MCLBYTES)
+#define NCL_INIT       (4096/CLBYTES)
 #else
 #define NCL_INIT       1
 #endif
 #else
 #define NCL_INIT       1
 #endif
@@ -230,12 +233,13 @@ m_prepend(m, len, how)
        return (m);
 }
 
        return (m);
 }
 
-/*
 /*
  * Make a copy of an mbuf chain starting "off0" bytes from the beginning,
  * continuing for "len" bytes.  If len is M_COPYALL, copy to end of mbuf.
  * The wait parameter is a choice of M_WAIT/M_DONTWAIT from caller.
  */
 /*
  * Make a copy of an mbuf chain starting "off0" bytes from the beginning,
  * continuing for "len" bytes.  If len is M_COPYALL, copy to end of mbuf.
  * The wait parameter is a choice of M_WAIT/M_DONTWAIT from caller.
  */
+int MCFail;
+
 struct mbuf *
 m_copym(m, off0, len, wait)
        register struct mbuf *m;
 struct mbuf *
 m_copym(m, off0, len, wait)
        register struct mbuf *m;
@@ -294,9 +298,12 @@ m_copym(m, off0, len, wait)
                m = m->m_next;
                np = &n->m_next;
        }
                m = m->m_next;
                np = &n->m_next;
        }
+       if (top == 0)
+               MCFail++;
        return (top);
 nospace:
        m_freem(top);
        return (top);
 nospace:
        m_freem(top);
+       MCFail++;
        return (0);
 }
 
        return (0);
 }
 
@@ -439,6 +446,8 @@ m_adj(mp, req_len)
  * If there is room, it will add up to max_protohdr-len extra bytes to the
  * contiguous region in an attempt to avoid being called next time.
  */
  * If there is room, it will add up to max_protohdr-len extra bytes to the
  * contiguous region in an attempt to avoid being called next time.
  */
+int MPFail;
+
 struct mbuf *
 m_pullup(n, len)
        register struct mbuf *n;
 struct mbuf *
 m_pullup(n, len)
        register struct mbuf *n;
@@ -467,8 +476,10 @@ m_pullup(n, len)
                if (m == 0)
                        goto bad;
                m->m_len = 0;
                if (m == 0)
                        goto bad;
                m->m_len = 0;
-               if (n->m_flags & M_PKTHDR)
+               if (n->m_flags & M_PKTHDR) {
                        M_COPY_PKTHDR(m, n);
                        M_COPY_PKTHDR(m, n);
+                       n->m_flags &= ~M_PKTHDR;
+               }
        }
        space = &m->m_dat[MLEN] - (m->m_data + m->m_len);
        do {
        }
        space = &m->m_dat[MLEN] - (m->m_data + m->m_len);
        do {
@@ -492,5 +503,6 @@ m_pullup(n, len)
        return (m);
 bad:
        m_freem(n);
        return (m);
 bad:
        m_freem(n);
+       MPFail++;
        return (0);
 }
        return (0);
 }