Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/uipc_sockbuf.c
Show First 20 Lines • Show All 206 Lines • ▼ Show 20 Lines | sbready(struct sockbuf *sb, struct mbuf *m0, int count) | ||||
KASSERT(count > 0, ("%s: invalid count %d", __func__, count)); | KASSERT(count > 0, ("%s: invalid count %d", __func__, count)); | ||||
m = m0; | m = m0; | ||||
blocker = (sb->sb_fnrdy == m) ? M_BLOCKED : 0; | blocker = (sb->sb_fnrdy == m) ? M_BLOCKED : 0; | ||||
while (count > 0) { | while (count > 0) { | ||||
KASSERT(m->m_flags & M_NOTREADY, | KASSERT(m->m_flags & M_NOTREADY, | ||||
("%s: m %p !M_NOTREADY", __func__, m)); | ("%s: m %p !M_NOTREADY", __func__, m)); | ||||
if ((m->m_flags & M_EXTPG) != 0) { | if ((m->m_flags & M_EXTPG) != 0 && m->m_epg_npgs != 0) { | ||||
if (count < m->m_epg_nrdy) { | if (count < m->m_epg_nrdy) { | ||||
m->m_epg_nrdy -= count; | m->m_epg_nrdy -= count; | ||||
count = 0; | count = 0; | ||||
break; | break; | ||||
} | } | ||||
count -= m->m_epg_nrdy; | count -= m->m_epg_nrdy; | ||||
m->m_epg_nrdy = 0; | m->m_epg_nrdy = 0; | ||||
} else | } else | ||||
▲ Show 20 Lines • Show All 1,572 Lines • Show Last 20 Lines |