Re: 2.1.125 oops in ip_queue_xmit...

Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
Mon, 30 Nov 1998 19:22:54 +0300 (MSK)


Hello!

> >>EIP: c0154208 <ip_queue_xmit+27c/344>
> Trace: c015a9b1 <tcp_transmit_skb+3b1/3bc>
> Trace: c015be49 <tcp_send_ack+89/90>
> Trace: c015c298 <tcp_delack_timer+0/28>

Do I hallucinate or I am sane yet?
Seems, tcp_delack_timer() is called on locked socket.

Tomasz, I think appended patch will solve your problem.

I am not sure, that it is finally correct, though.
Dave,Andi, Andrey, please, check.

I also suspect, that Ted Deppner's report (equally obscure) is also closed
by this fix.

Alexey

--- linux/net/ipv4/tcp_timer.c.orig Mon Nov 30 19:04:08 1998
+++ linux/net/ipv4/tcp_timer.c Mon Nov 30 19:10:24 1998
@@ -170,8 +170,12 @@

if(!sk->zapped &&
sk->tp_pinfo.af_tcp.delayed_acks &&
- sk->state != TCP_CLOSE)
- tcp_send_ack(sk);
+ sk->state != TCP_CLOSE) {
+ if (atomic_read(&sk->sock_readers) == 0)
+ tcp_send_ack(sk);
+ else
+ tcp_send_delayed_ack(&(sk->tp_pinfo.af_tcp), HZ/10);
+ }
}

void tcp_probe_timer(unsigned long data)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/