Subject: m_copyback0 wrong ?
To: None <>
From: Manuel Bouyer <>
List: tech-net
Date: 01/23/2006 12:51:36
mishka@ reported a panic in m_makewritable() because of a DEBUG check:
        error = m_copyback0(mp, off, len, NULL,

#if defined(DEBUG)
        reslen = 0;
        for (n = *mp; n; n = n->m_next)
                reslen += n->m_len;
        if (origlen != reslen)
                panic("m_makewritable: length changed");
        if (((*mp)->m_flags & M_PKTHDR) != 0 && reslen != (*mp)->m_pkthdr.len)
                panic("m_makewritable: inconsist");
#endif /* defined(DEBUG) */

This would mean m_copyback0() modified the mbuf chain but was unable
to complete the job. From the mbuf manual page, m_makewritable()
should return the original mbuf chain in case of error, so m_copyback0()
should too ...
Now a quick look at m_copyback0() didn't show me where the problem is ...

Manuel Bouyer <>
     NetBSD: 26 ans d'experience feront toujours la difference