Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Aug 2000 17:22:35 -0400 (EDT)
From:      rwatson@freebsd.org
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/20927: looutput: mbuf allocation failed
Message-ID:  <200008292122.RAA02996@fledge.watson.org>

next in thread | raw e-mail | index | archive | help

>Number:         20927
>Category:       kern
>Synopsis:       dmesg output: looutput: mbuf allocation failed
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Aug 29 14:30:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Robert Watson
>Release:        FreeBSD 4.1-STABLE i386
>Organization:
>Environment:

fledge:/data/fbsd-stable/src/sys/net> uname -a
FreeBSD fledge.watson.org 4.1-STABLE FreeBSD 4.1-STABLE #2: Fri Jul 28 01:08:28 EDT 2000     root@fledge.watson.org:/data/fbsd-stable/src/sys/compile/FLEDGE  i386

>Description:

Found a weird message in my dmesg.  Exploration below; don't know what
prompted it, but the exploration suggests some possibilities.

% dmesg | grep looutput
looutput: mbuf allocation failed
looutput: mbuf allocation failed
looutput: mbuf allocation failed
looutput: mbuf allocation failed
looutput: mbuf allocation failed
looutput: mbuf allocation failed

from src/sys/net/if_loop.c:
        if (0) {
contiguousfail:
                printf("looutput: mbuf allocation failed\n");
        }

So apparently contiguousfail is being jumped to.  One of the following
conditions:

        /*
         * KAME requires that the packet to be contiguous on the
         * mbuf.  We need to make that sure.
         * this kind of code should be avoided.
         * XXX: fails to join if interface MTU > MCLBYTES.  jumbogram?
         */
        if (m && m->m_next != NULL && m->m_pkthdr.len < MCLBYTES) {
                struct mbuf *n;

                MGETHDR(n, M_DONTWAIT, MT_HEADER);
                if (!n)
                        goto contiguousfail;
                MCLGET(n, M_DONTWAIT);
                if (! (n->m_flags & M_EXT)) {
                        m_freem(n);
                        goto contiguousfail;
                }

                m_copydata(m, 0, m->m_pkthdr.len, mtod(n, caddr_t));
                n->m_pkthdr = m->m_pkthdr;
                n->m_len = m->m_pkthdr.len;
                m_freem(m);
                m = n;
        }

From src/sys/i386/include/param.h:

#define MCLSHIFT        11              /* convert bytes to m_buf clusters */
#endif  /* MCLSHIFT */
#define MCLBYTES        (1 << MCLSHIFT) /* size of an m_buf cluster */

For reference, MTU on lo0 is 16k, and MCLBYTES is 2048 on i386.  I'm guessing
this means that lo0 has problems with packets over 2k in size.  I could be
wrong.

>How-To-Repeat:

Unfortunately, have no idea.  Don't know what was going on on the system
at the time, and it's a multi-user machine with an average of 10 - 20
people logged in at any moment.

>Fix:

Not available.


>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200008292122.RAA02996>