diff options
author | mav <mav@FreeBSD.org> | 2009-01-18 20:19:55 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-01-18 20:19:55 +0000 |
commit | dcb95080708721223062130a104f98b98afc08b5 (patch) | |
tree | 84d8868117139604128994ba7867c1382d54f76d | |
parent | 74ed22786b2388740d2f5bc730136ec510dcfac2 (diff) | |
download | FreeBSD-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.c | 4 |
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; |