Add another MBUF_STRESS_TEST feature, m_defragrandomfailures.
When enabled, this causes m_defrag to randomly return NULL (following its normal failure case so that extra memory leaks are not introduced.) Code similar to this was used to find / fix a few bugs last week.
This commit is contained in:
parent
acbff226fc
commit
352d050e79
@ -36,6 +36,7 @@
|
||||
|
||||
#include "opt_mac.h"
|
||||
#include "opt_param.h"
|
||||
#include "opt_mbuf_stress_test.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -56,6 +57,9 @@ int m_defragpackets;
|
||||
int m_defragbytes;
|
||||
int m_defraguseless;
|
||||
int m_defragfailure;
|
||||
#ifdef MBUF_STRESS_TEST
|
||||
int m_defragrandomfailures;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* sysctl(8) exported objects
|
||||
@ -76,6 +80,10 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, m_defraguseless, CTLFLAG_RD,
|
||||
&m_defraguseless, 0, "");
|
||||
SYSCTL_INT(_kern_ipc, OID_AUTO, m_defragfailure, CTLFLAG_RD,
|
||||
&m_defragfailure, 0, "");
|
||||
#ifdef MBUF_STRESS_TEST
|
||||
SYSCTL_INT(_kern_ipc, OID_AUTO, m_defragrandomfailures, CTLFLAG_RW,
|
||||
&m_defragrandomfailures, 0, "");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "Move" mbuf pkthdr from "from" to "to".
|
||||
@ -802,6 +810,13 @@ m_defrag(struct mbuf *m0, int how)
|
||||
if (!(m0->m_flags & M_PKTHDR))
|
||||
return (m0);
|
||||
|
||||
#ifdef MBUF_STRESS_TEST
|
||||
if (m_defragrandomfailures) {
|
||||
int temp = arc4random() & 0xff;
|
||||
if (temp == 0xba)
|
||||
goto nospace;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m0->m_pkthdr.len > MHLEN)
|
||||
m_final = m_getcl(how, MT_DATA, M_PKTHDR);
|
||||
|
Loading…
Reference in New Issue
Block a user