View | Details | Raw Unified | Return to bug 193005
Collapse All | Expand All

(-)b/sys/kern/uipc_mbuf.c (-12 / +14 lines)
Lines 736-744 nospace: Link Here
736
 */
736
 */
737
737
738
static int
738
static int
739
m_bcopyxxx(void *s, void *t, u_int len)
739
m_bcopyxxx(void *arg, void *src, u_int len)
740
{
740
{
741
	bcopy(s, t, (size_t)len);
741
	struct mbuf *dst = arg;
742
743
	bcopy(src, mtod(dst, caddr_t) + dst->m_len, (size_t) len);
744
	dst->m_len += len;
742
	return 0;
745
	return 0;
743
}
746
}
744
747
Lines 790-806 m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len, Link Here
790
	 */
793
	 */
791
	/* Shortcut if enough free space in first/last mbuf. */
794
	/* Shortcut if enough free space in first/last mbuf. */
792
	if (!prep && M_TRAILINGSPACE(mm) >= len) {
795
	if (!prep && M_TRAILINGSPACE(mm) >= len) {
793
		m_apply(n, off, len, m_bcopyxxx, mtod(mm, caddr_t) +
796
		m_apply(n, off, len, m_bcopyxxx, mm);
794
			 mm->m_len);
797
		if (m->m_flags & M_PKTHDR)
795
		mm->m_len += len;
798
			m->m_pkthdr.len += len;
796
		mm->m_pkthdr.len += len;
797
		return m;
799
		return m;
798
	}
800
	}
799
	if (prep && M_LEADINGSPACE(mm) >= len) {
801
	if (prep && M_LEADINGSPACE(mm) >= len) {
800
		mm->m_data = mtod(mm, caddr_t) - len;
802
		mm->m_data = mtod(mm, caddr_t) - len;
801
		m_apply(n, off, len, m_bcopyxxx, mtod(mm, caddr_t));
803
		m_apply(n, off, len, m_bcopyxxx, mm);
802
		mm->m_len += len;
804
		if (mm->m_flags & M_PKTHDR)
803
		mm->m_pkthdr.len += len;
805
			mm->m_pkthdr.len += len;
804
		return mm;
806
		return mm;
805
	}
807
	}
806
808
Lines 840-846 m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len, Link Here
840
				break;
842
				break;
841
		}
843
		}
842
		z->m_data += i - len;
844
		z->m_data += i - len;
843
		m_move_pkthdr(mm, z);
845
		if (z->m_flags & M_PKTHDR)
846
			m_move_pkthdr(mm, z);
844
		x->m_next = mm;
847
		x->m_next = mm;
845
		mm = z;
848
		mm = z;
846
	}
849
	}
Lines 858-865 m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len, Link Here
858
	while (len > 0) {
861
	while (len > 0) {
859
		KASSERT(z != NULL, ("m_copymdata, falling off target edge"));
862
		KASSERT(z != NULL, ("m_copymdata, falling off target edge"));
860
		i = M_TRAILINGSPACE(z);
863
		i = M_TRAILINGSPACE(z);
861
		m_apply(n, off, i, m_bcopyxxx, mtod(z, caddr_t) + z->m_len);
864
		m_apply(n, off, i, m_bcopyxxx, z);
862
		z->m_len += i;
863
		/* fixup pkthdr.len if necessary */
865
		/* fixup pkthdr.len if necessary */
864
		if ((prep ? mm : m)->m_flags & M_PKTHDR)
866
		if ((prep ? mm : m)->m_flags & M_PKTHDR)
865
			(prep ? mm : m)->m_pkthdr.len += i;
867
			(prep ? mm : m)->m_pkthdr.len += i;

Return to bug 193005