Merge r204810 from head to stable/8:

Remove unnecessary locking of divcbinfo lock from div_output(): this has
  not been required since FreeBSD 7.0 when the so_pcb pointer leading to inp
  was guaranteed to be stable when a valid socket reference is held (as it
  is in the output path).

  Reviewed by:	bz
  Sponsored by:	Juniper Networks

Approved by:	re (kib)
This commit is contained in:
Robert Watson 2010-06-03 08:55:45 +00:00
parent 32aa4ac70d
commit c00cb785e5

View File

@ -392,7 +392,6 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
struct inpcb *inp;
dt->info |= IPFW_IS_DIVERT | IPFW_INFO_OUT;
INP_INFO_WLOCK(&V_divcbinfo);
inp = sotoinpcb(so);
INP_RLOCK(inp);
/*
@ -403,7 +402,6 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
((u_short)ntohs(ip->ip_len) > m->m_pkthdr.len)) {
error = EINVAL;
INP_RUNLOCK(inp);
INP_INFO_WUNLOCK(&V_divcbinfo);
m_freem(m);
} else {
/* Convert fields to host order for ip_output() */
@ -444,7 +442,6 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
error = ENOBUFS;
}
INP_RUNLOCK(inp);
INP_INFO_WUNLOCK(&V_divcbinfo);
if (error == ENOBUFS) {
m_freem(m);
return (error);