netmap: fix two panics with emulated adapter
This patch fixes 2 panics. The first one is due to the current VNET not being set in the emulated adapter transmission path. The second one is caused by the M_PKTHDR flag not being set when preallocated mbufs are recycled in the transmit path. Submitted by: aleksandr.fedorov@itglobal.com Reviewed by: vmaffione MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D20824
This commit is contained in:
parent
e3722b788e
commit
23ced94451
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=349581
@ -444,6 +444,7 @@ nm_os_generic_xmit_frame(struct nm_os_gen_arg *a)
|
|||||||
m->m_ext.ext_size = len;
|
m->m_ext.ext_size = len;
|
||||||
#endif /* __FreeBSD_version >= 1100000 */
|
#endif /* __FreeBSD_version >= 1100000 */
|
||||||
|
|
||||||
|
m->m_flags |= M_PKTHDR;
|
||||||
m->m_len = m->m_pkthdr.len = len;
|
m->m_len = m->m_pkthdr.len = len;
|
||||||
|
|
||||||
/* mbuf refcnt is not contended, no need to use atomic
|
/* mbuf refcnt is not contended, no need to use atomic
|
||||||
@ -452,7 +453,9 @@ nm_os_generic_xmit_frame(struct nm_os_gen_arg *a)
|
|||||||
M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
|
M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
|
||||||
m->m_pkthdr.flowid = a->ring_nr;
|
m->m_pkthdr.flowid = a->ring_nr;
|
||||||
m->m_pkthdr.rcvif = ifp; /* used for tx notification */
|
m->m_pkthdr.rcvif = ifp; /* used for tx notification */
|
||||||
|
CURVNET_SET(ifp->if_vnet);
|
||||||
ret = NA(ifp)->if_transmit(ifp, m);
|
ret = NA(ifp)->if_transmit(ifp, m);
|
||||||
|
CURVNET_RESTORE();
|
||||||
return ret ? -1 : 0;
|
return ret ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user