Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: NetBSD/xen network problems (need help)



On Wed, Mar 15, 2006 at 08:35:34AM +0900, YAMAMOTO Takashi wrote:
> > m_makewritable origlen 112 newlen 182 error 0
> > panic: m_makewritable: length changed
> 
> the following would be the minimal fix.
> 
> YAMAMOTO Takashi
> 
> Index: if_xennet.c
> ===================================================================
> --- if_xennet.c       (revision 1576)
> +++ if_xennet.c       (working copy)
> @@ -787,8 +787,7 @@ xen_network_handler(void *arg)
>                        * memory, copy data and push the receive
>                        * buffer back to the hypervisor.
>                        */
> -                     m->m_len = MHLEN;
> -                     m->m_pkthdr.len = 0;
> +                     m->m_len = m->m_pkthdr.len = 0;
>                       m_copyback(m, 0, rx->status, pktp);
>                       xennet_rx_push_buffer(sc, rx->id);
>                       if (m->m_pkthdr.len < rx->status) {

I think setting m_len to 0 will cause the m_copyback() to add a second mbuf to
the chain to store the data, leaving the first one with a NULL size.

Now, it seems that m_copyback() adjust m->m_pkthdr.len, but not m->m_len.
Should it ? It so, adding
                        m->m_len = m->m_pkthdr.len;
after the call to m_copyback() should be enough.

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--



Home | Main Index | Thread Index | Old Index