mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-20 08:44:33 +00:00
Eliminate use of dtom() in spx_output() by fixing up tracking of the
containing mbuf for 'si' in local variable 'm'. MFC after: 1 month
This commit is contained in:
parent
fc2c3e84bc
commit
e098e5f032
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=192756
|
@ -428,7 +428,7 @@ int
|
|||
spx_output(struct spxpcb *cb, struct mbuf *m0)
|
||||
{
|
||||
struct socket *so = cb->s_ipxpcb->ipxp_socket;
|
||||
struct mbuf *m;
|
||||
struct mbuf *m = NULL;
|
||||
struct spx *si = NULL;
|
||||
struct sockbuf *sb = &so->so_snd;
|
||||
int len = 0, win, rcv_win;
|
||||
|
@ -678,6 +678,7 @@ spx_output(struct spxpcb *cb, struct mbuf *m0)
|
|||
* Find requested packet.
|
||||
*/
|
||||
si = NULL;
|
||||
m = NULL;
|
||||
if (len > 0) {
|
||||
cb->s_want = cb->s_snxt;
|
||||
for (m = sb->sb_mb; m != NULL; m = m->m_nextpkt) {
|
||||
|
@ -687,10 +688,12 @@ spx_output(struct spxpcb *cb, struct mbuf *m0)
|
|||
}
|
||||
found:
|
||||
if (si != NULL) {
|
||||
if (si->si_seq == cb->s_snxt)
|
||||
cb->s_snxt++;
|
||||
else
|
||||
spxstat.spxs_sndvoid++, si = NULL;
|
||||
if (si->si_seq != cb->s_snxt) {
|
||||
spxstat.spxs_sndvoid++;
|
||||
si = NULL;
|
||||
m = NULL;
|
||||
} else
|
||||
cb->s_snxt++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -703,12 +706,12 @@ spx_output(struct spxpcb *cb, struct mbuf *m0)
|
|||
if (SSEQ_LT(alo, cb->s_alo))
|
||||
alo = cb->s_alo;
|
||||
|
||||
if (si != NULL) {
|
||||
if (m != NULL) {
|
||||
/*
|
||||
* Must make a copy of this packet for ipx_output to monkey
|
||||
* with.
|
||||
*/
|
||||
m = m_copy(dtom(si), 0, (int)M_COPYALL);
|
||||
m = m_copy(m, 0, M_COPYALL);
|
||||
if (m == NULL)
|
||||
return (ENOBUFS);
|
||||
si = mtod(m, struct spx *);
|
||||
|
|
Loading…
Reference in a new issue