summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2009-01-18 20:19:55 +0000
committermav <mav@FreeBSD.org>2009-01-18 20:19:55 +0000
commitdcb95080708721223062130a104f98b98afc08b5 (patch)
tree84d8868117139604128994ba7867c1382d54f76d
parent74ed22786b2388740d2f5bc730136ec510dcfac2 (diff)
downloadFreeBSD-src-dcb95080708721223062130a104f98b98afc08b5.zip
FreeBSD-src-dcb95080708721223062130a104f98b98afc08b5.tar.gz
Teach m_copyback() to use trailing space of the last mbuf in chain.
-rw-r--r--sys/kern/uipc_mbuf.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
index f574325..bf24132 100644
--- a/sys/kern/uipc_mbuf.c
+++ b/sys/kern/uipc_mbuf.c
@@ -1271,6 +1271,10 @@ m_copyback(struct mbuf *m0, int off, int len, c_caddr_t cp)
m = m->m_next;
}
while (len > 0) {
+ if (m->m_next == NULL && (len > m->m_len - off)) {
+ m->m_len += min(len - (m->m_len - off),
+ M_TRAILINGSPACE(m));
+ }
mlen = min (m->m_len - off, len);
bcopy(cp, off + mtod(m, caddr_t), (u_int)mlen);
cp += mlen;
OpenPOWER on IntegriCloud