From 9d5e898163c7c5084f30c9675cf5f557a969e666 Mon Sep 17 00:00:00 2001 From: rwatson Date: Mon, 12 Jul 2004 19:28:07 +0000 Subject: After each label in tcp_input(), assert the inpcbinfo and inpcb lock state that we expect. --- sys/netinet/tcp_input.c | 18 +++++++++++++++++- sys/netinet/tcp_reass.c | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'sys/netinet') diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 78b1fad..ffde973 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -985,6 +985,8 @@ findpcb: goto drop; } after_listen: + KASSERT(headlocked, ("tcp_input(): after_listen head is not locked")); + INP_LOCK_ASSERT(inp); /* XXX temp debugging */ /* should not happen - syncache should pick up these connections */ @@ -1472,6 +1474,10 @@ after_listen: } trimthenstep6: + KASSERT(headlocked, + ("tcp_input(): trimthenstep6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Advance th->th_seq to correspond to first data byte. * If data, trim to stay within window, @@ -2081,6 +2087,10 @@ trimthenstep6: } process_ACK: + KASSERT(headlocked, + ("tcp_input(): process_ACK head is not locked")); + INP_LOCK_ASSERT(inp); + acked = th->th_ack - tp->snd_una; tcpstat.tcps_rcvackpack++; tcpstat.tcps_rcvackbyte += acked; @@ -2261,6 +2271,9 @@ process_ACK: } step6: + KASSERT(headlocked, ("tcp_input(): step6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Update window information. * Don't look at window if no ACK: TAC's send garbage on first SYN. @@ -2343,7 +2356,9 @@ step6: tp->rcv_up = tp->rcv_nxt; } dodata: /* XXX */ - KASSERT(headlocked, ("headlocked")); + KASSERT(headlocked, ("tcp_input(): dodata head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Process the segment text, merging it into the TCP sequencing queue, * and arranging for acknowledgment of receipt if necessary. @@ -2479,6 +2494,7 @@ dodata: /* XXX */ (void) tcp_output(tp); check_delack: + INP_LOCK_ASSERT(inp); if (tp->t_flags & TF_DELACK) { tp->t_flags &= ~TF_DELACK; callout_reset(tp->tt_delack, tcp_delacktime, diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index 78b1fad..ffde973 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -985,6 +985,8 @@ findpcb: goto drop; } after_listen: + KASSERT(headlocked, ("tcp_input(): after_listen head is not locked")); + INP_LOCK_ASSERT(inp); /* XXX temp debugging */ /* should not happen - syncache should pick up these connections */ @@ -1472,6 +1474,10 @@ after_listen: } trimthenstep6: + KASSERT(headlocked, + ("tcp_input(): trimthenstep6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Advance th->th_seq to correspond to first data byte. * If data, trim to stay within window, @@ -2081,6 +2087,10 @@ trimthenstep6: } process_ACK: + KASSERT(headlocked, + ("tcp_input(): process_ACK head is not locked")); + INP_LOCK_ASSERT(inp); + acked = th->th_ack - tp->snd_una; tcpstat.tcps_rcvackpack++; tcpstat.tcps_rcvackbyte += acked; @@ -2261,6 +2271,9 @@ process_ACK: } step6: + KASSERT(headlocked, ("tcp_input(): step6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Update window information. * Don't look at window if no ACK: TAC's send garbage on first SYN. @@ -2343,7 +2356,9 @@ step6: tp->rcv_up = tp->rcv_nxt; } dodata: /* XXX */ - KASSERT(headlocked, ("headlocked")); + KASSERT(headlocked, ("tcp_input(): dodata head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Process the segment text, merging it into the TCP sequencing queue, * and arranging for acknowledgment of receipt if necessary. @@ -2479,6 +2494,7 @@ dodata: /* XXX */ (void) tcp_output(tp); check_delack: + INP_LOCK_ASSERT(inp); if (tp->t_flags & TF_DELACK) { tp->t_flags &= ~TF_DELACK; callout_reset(tp->tt_delack, tcp_delacktime, -- cgit v1.1