diff options
Diffstat (limited to 'sys/netns/spp_usrreq.c')
| -rw-r--r-- | sys/netns/spp_usrreq.c | 89 |
1 files changed, 15 insertions, 74 deletions
diff --git a/sys/netns/spp_usrreq.c b/sys/netns/spp_usrreq.c index 78bfec7e529a..8a14ff039f76 100644 --- a/sys/netns/spp_usrreq.c +++ b/sys/netns/spp_usrreq.c @@ -106,7 +106,6 @@ spp_input(m, nsp) si->si_alo = ntohs(si->si_alo); so = nsp->nsp_socket; - SOCK_LOCK(so); if (so->so_options & SO_DEBUG || traceallspps) { ostate = cb->s_state; spp_savesi = *si; @@ -114,7 +113,6 @@ spp_input(m, nsp) if (so->so_options & SO_ACCEPTCONN) { struct sppcb *ocb = cb; - SOCK_UNLOCK(so); so = sonewconn(so, 0); if (so == 0) { goto drop; @@ -138,8 +136,7 @@ spp_input(m, nsp) cb->s_flags = ocb->s_flags; /* preserve sockopts */ cb->s_flags2 = ocb->s_flags2; /* preserve sockopts */ cb->s_state = TCPS_LISTEN; - } else - SOCK_UNLOCK(so); + } /* * Packet received on connection. @@ -210,9 +207,7 @@ spp_input(m, nsp) nsp->nsp_fport = si->si_sport; cb->s_timer[SPPT_REXMT] = 0; cb->s_timer[SPPT_KEEP] = SPPTV_KEEP; - SOCK_LOCK(so); soisconnected(so); - SOCK_UNLOCK(so); cb->s_state = TCPS_ESTABLISHED; sppstat.spps_accepts++; } @@ -239,9 +234,7 @@ spp_input(m, nsp) cb->s_dport = nsp->nsp_fport = si->si_sport; cb->s_timer[SPPT_REXMT] = 0; cb->s_flags |= SF_ACKNOW; - SOCK_LOCK(so); soisconnected(so); - SOCK_UNLOCK(so); cb->s_state = TCPS_ESTABLISHED; /* Use roundtrip time of connection request for initial rtt */ if (cb->s_rtt) { @@ -253,12 +246,8 @@ spp_input(m, nsp) cb->s_rtt = 0; } } - SOCK_LOCK(so); - if (so->so_options & SO_DEBUG || traceallspps) { - SOCK_UNLOCK(so); + if (so->so_options & SO_DEBUG || traceallspps) spp_trace(SA_INPUT, (u_char)ostate, cb, &spp_savesi, 0); - } else - SOCK_UNLOCK(so); m->m_len -= sizeof (struct idp); m->m_pkthdr.len -= sizeof (struct idp); @@ -279,23 +268,15 @@ dropwithreset: si->si_ack = ntohs(si->si_ack); si->si_alo = ntohs(si->si_alo); ns_error(dtom(si), NS_ERR_NOSOCK, 0); - SOCK_LOCK(cb->s_nspcb->nsp_socket); - if (cb->s_nspcb->nsp_socket->so_options & SO_DEBUG || traceallspps) { - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); + if (cb->s_nspcb->nsp_socket->so_options & SO_DEBUG || traceallspps) spp_trace(SA_DROP, (u_char)ostate, cb, &spp_savesi, 0); - } else - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); return; drop: bad: - SOCK_LOCK(cb->s_nspcb->nsp_socket); if (cb == 0 || cb->s_nspcb->nsp_socket->so_options & SO_DEBUG || - traceallspps) { - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); + traceallspps) spp_trace(SA_DROP, (u_char)ostate, cb, &spp_savesi, 0); - } else - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); m_freem(m); } @@ -429,9 +410,7 @@ register struct spidp *si; else break; } - SOCK_LOCK(so); sowwakeup(so); - SOCK_UNLOCK(so); cb->s_rack = si->si_ack; update_window: if (SSEQ_LT(cb->s_snxt, cb->s_rack)) @@ -470,14 +449,11 @@ update_window: } /* else queue this packet; */ } else { /*register struct socket *so = cb->s_nspcb->nsp_socket; - SOCK_LOCK(so); if (so->so_state && SS_NOFDREF) { - SOCK_UNLOCK(so); ns_error(dtom(si), NS_ERR_NOSOCK, 0); (void)spp_close(cb); - } else { - SOCK_UNLOCK(so); - would crash system }*/ + } else + would crash system*/ spp_istat.notyet++; ns_error(dtom(si), NS_ERR_FULLUP, 0); return (0); @@ -538,11 +514,8 @@ present: cb->s_oobflags &= ~SF_IOOB; if (so->so_rcv.sb_cc) so->so_oobmark = so->so_rcv.sb_cc; - else { - SOCK_LOCK(so); + else so->so_state |= SS_RCVATMARK; - SOCK_UNLOCK(so); - } } q = q->si_prev; remque(q->si_next); @@ -572,9 +545,7 @@ present: MCHTYPE(m, MT_OOBDATA); spp_newchecks[1]++; so->so_oobmark = 0; - SOCK_LOCK(so); so->so_state &= ~SS_RCVATMARK; - SOCK_UNLOCK(so); } if (packetp == 0) { m->m_data += SPINC; @@ -600,11 +571,7 @@ present: } else break; } - if (wakeup) { - SOCK_LOCK(so); - sorwakeup(so); - SOCK_UNLOCK(so); - } + if (wakeup) sorwakeup(so); return (0); } @@ -1048,12 +1015,8 @@ send: si->si_cc |= SP_SP; } else { cb->s_outx = 3; - SOCK_LOCK(so); - if (so->so_options & SO_DEBUG || traceallspps) { - SOCK_UNLOCK(so); + if (so->so_options & SO_DEBUG || traceallspps) spp_trace(SA_OUTPUT, cb->s_state, cb, si, 0); - } else - SOCK_UNLOCK(so); return (0); } /* @@ -1119,20 +1082,13 @@ send: si->si_sum = 0xffff; cb->s_outx = 4; - SOCK_LOCK(so); - if (so->so_options & SO_DEBUG || traceallspps) { - SOCK_UNLOCK(so); + if (so->so_options & SO_DEBUG || traceallspps) spp_trace(SA_OUTPUT, cb->s_state, cb, si, 0); - SOCK_LOCK(so); - } - if (so->so_options & SO_DONTROUTE) { - SOCK_UNLOCK(so); + if (so->so_options & SO_DONTROUTE) error = ns_output(m, (struct route *)0, NS_ROUTETOIF); - } else { - SOCK_UNLOCK(so); + else error = ns_output(m, &cb->s_nspcb->nsp_route, 0); - } } if (error) { return (error); @@ -1413,9 +1369,7 @@ spp_usrreq(so, req, m, nam, controlp) error = ns_pcbconnect(nsp, nam); if (error) break; - SOCK_LOCK(so); soisconnecting(so); - SOCK_UNLOCK(so); sppstat.spps_connattempt++; cb->s_state = TCPS_SYN_SENT; cb->s_did = 0; @@ -1489,15 +1443,12 @@ spp_usrreq(so, req, m, nam, controlp) break; case PRU_RCVOOB: - SOCK_LOCK(so); if ((cb->s_oobflags & SF_IOOB) || so->so_oobmark || (so->so_state & SS_RCVATMARK)) { - SOCK_UNLOCK(so); m->m_len = 1; *mtod(m, caddr_t) = cb->s_iobc; break; - } else - SOCK_UNLOCK(so); + } error = EINVAL; break; @@ -1545,12 +1496,8 @@ spp_usrreq(so, req, m, nam, controlp) default: panic("sp_usrreq"); } - SOCK_LOCK(so); - if (cb && (so->so_options & SO_DEBUG || traceallspps)) { - SOCK_UNLOCK(so); + if (cb && (so->so_options & SO_DEBUG || traceallspps)) spp_trace(SA_USER, (u_char)ostate, cb, (struct spidp *)0, req); - } else - SOCK_UNLOCK(so); release: if (controlp != NULL) m_freem(controlp); @@ -1627,9 +1574,7 @@ spp_close(cb) (void) m_free(dtom(cb->s_idp)); (void) m_free(dtom(cb)); nsp->nsp_pcb = 0; - SOCK_LOCK(so); soisdisconnected(so); - SOCK_UNLOCK(so); ns_pcbdetach(nsp); sppstat.spps_closed++; return ((struct sppcb *)0); @@ -1838,17 +1783,13 @@ spp_timers(cb, timer) sppstat.spps_keeptimeo++; if (cb->s_state < TCPS_ESTABLISHED) goto dropit; - SOCK_LOCK(cb->s_nspcb->nsp_socket); if (cb->s_nspcb->nsp_socket->so_options & SO_KEEPALIVE) { - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); if (cb->s_idle >= SPPTV_MAXIDLE) goto dropit; sppstat.spps_keepprobe++; (void) spp_output(cb, (struct mbuf *) 0); - } else { - SOCK_UNLOCK(cb->s_nspcb->nsp_socket); + } else cb->s_idle = 0; - } cb->s_timer[SPPT_KEEP] = SPPTV_KEEP; break; dropit: |
