mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
mbuf: provide m_freemp()
This function follows both m_nextpkt and m_next linkage freeing all mbufs.
Note that existing m_freem() follows only m_next.
Reviewed by: khng
Differential Revision: https://reviews.freebsd.org/D45477
(cherry picked from commit badf44cc21)
This commit is contained in:
parent
55c5dad2f3
commit
a3f7b81fdd
3 changed files with 24 additions and 0 deletions
|
|
@ -1569,6 +1569,25 @@ m_freem(struct mbuf *mb)
|
|||
mb = m_free(mb);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free an entire chain of mbufs and associated external buffers, following
|
||||
* both m_next and m_nextpkt linkage.
|
||||
* Note: doesn't support NULL argument.
|
||||
*/
|
||||
void
|
||||
m_freemp(struct mbuf *m)
|
||||
{
|
||||
struct mbuf *n;
|
||||
|
||||
MBUF_PROBE1(m__freemp, m);
|
||||
do {
|
||||
n = m->m_nextpkt;
|
||||
while (m != NULL)
|
||||
m = m_free(m);
|
||||
m = n;
|
||||
} while (m != NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Temporary primitive to allow freeing without going through m_free.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -113,6 +113,9 @@ SDT_PROBE_DEFINE1_XLATE(sdt, , , m__free,
|
|||
SDT_PROBE_DEFINE1_XLATE(sdt, , , m__freem,
|
||||
"struct mbuf *", "mbufinfo_t *");
|
||||
|
||||
SDT_PROBE_DEFINE1_XLATE(sdt, , , m__freemp,
|
||||
"struct mbuf *", "mbufinfo_t *");
|
||||
|
||||
#include <security/mac/mac_framework.h>
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ SDT_PROBE_DECLARE(sdt, , , m__cljget);
|
|||
SDT_PROBE_DECLARE(sdt, , , m__cljset);
|
||||
SDT_PROBE_DECLARE(sdt, , , m__free);
|
||||
SDT_PROBE_DECLARE(sdt, , , m__freem);
|
||||
SDT_PROBE_DECLARE(sdt, , , m__freemp);
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
|
|
@ -844,6 +845,7 @@ void m_extadd(struct mbuf *, char *, u_int, m_ext_free_t,
|
|||
u_int m_fixhdr(struct mbuf *);
|
||||
struct mbuf *m_fragment(struct mbuf *, int, int);
|
||||
void m_freem(struct mbuf *);
|
||||
void m_freemp(struct mbuf *);
|
||||
void m_free_raw(struct mbuf *);
|
||||
struct mbuf *m_get2(int, int, short, int);
|
||||
struct mbuf *m_get3(int, int, short, int);
|
||||
|
|
|
|||
Loading…
Reference in a new issue