Eric Dumazet
ff905b1e4a
tcp: splice: fix an infinite loop in tcp_read_sock()
...
commit 02275a2ee7c0 (tcp: don't abort splice() after small transfers)
added a regression.
[ 83.843570] INFO: rcu_sched self-detected stall on CPU
[ 83.844575] INFO: rcu_sched detected stalls on CPUs/tasks: { 6} (detected by 0, t=21002 jiffies, g=4457, c=4456, q=13132)
[ 83.844582] Task dump for CPU 6:
[ 83.844584] netperf R running task 0 8966 8952 0x0000000c
[ 83.844587] 0000000000000000 0000000000000006 0000000000006c6c 0000000000000000
[ 83.844589] 000000000000006c 0000000000000096 ffffffff819ce2bc ffffffffffffff10
[ 83.844592] ffffffff81088679 0000000000000010 0000000000000246 ffff880c4b9ddcd8
[ 83.844594] Call Trace:
[ 83.844596] [<ffffffff81088679>] ? vprintk_emit+0x1c9/0x4c0
[ 83.844601] [<ffffffff815ad449>] ? schedule+0x29/0x70
[ 83.844606] [<ffffffff81537bd2>] ? tcp_splice_data_recv+0x42/0x50
[ 83.844610] [<ffffffff8153beaa>] ? tcp_read_sock+0xda/0x260
[ 83.844613] [<ffffffff81537b90>] ? tcp_prequeue_process+0xb0/0xb0
[ 83.844615] [<ffffffff8153c0f0>] ? tcp_splice_read+0xc0/0x250
[ 83.844618] [<ffffffff814dc0c2>] ? sock_splice_read+0x22/0x30
[ 83.844622] [<ffffffff811b820b>] ? do_splice_to+0x7b/0xa0
[ 83.844627] [<ffffffff811ba4bc>] ? sys_splice+0x59c/0x5d0
[ 83.844630] [<ffffffff8119745b>] ? putname+0x2b/0x40
[ 83.844633] [<ffffffff8118bcb4>] ? do_sys_open+0x174/0x1e0
[ 83.844636] [<ffffffff815b6202>] ? system_call_fastpath+0x16/0x1b
if recv_actor() returns 0, we should stop immediately,
because looping wont give a chance to drain the pipe.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willy Tarreau <w@1wt.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-01-10 14:07:19 -08:00
..
2012-12-16 23:28:30 +01:00
2012-11-18 20:33:37 -05:00
2012-07-11 21:27:49 -07:00
2012-12-24 18:42:58 -08:00
2012-07-18 09:01:12 -07:00
2011-05-08 13:48:57 -07:00
2013-01-06 21:11:18 -08:00
2012-07-11 21:27:49 -07:00
2012-11-18 20:33:36 -05:00
2011-03-24 18:06:47 -07:00
2012-10-06 03:04:45 +09:00
2012-10-22 14:29:06 -04:00
2012-09-18 15:44:34 -04:00
2012-03-12 17:05:21 -07:00
2012-11-26 17:24:41 -05:00
2012-10-01 18:39:44 -04:00
2012-12-14 13:14:07 -05:00
2012-12-12 18:07:07 -08:00
2012-09-19 17:23:28 -04:00
2012-11-30 15:02:56 -05:00
2011-10-19 03:10:46 -04:00
2012-05-16 01:01:03 -04:00
2012-10-02 09:54:49 -07:00
2012-10-08 17:42:36 -04:00
2012-12-12 18:07:07 -08:00
2012-12-26 15:19:56 -08:00
2012-07-30 14:53:21 -07:00
2012-11-18 20:32:45 -05:00
2012-12-09 00:20:28 -05:00
2013-01-08 17:57:10 -08:00
2012-11-18 20:32:45 -05:00
2012-07-11 21:27:49 -07:00
2013-01-04 15:14:14 -08:00
2012-11-18 20:32:45 -05:00
2012-12-04 13:08:11 -05:00
2012-07-18 09:36:12 -07:00
2012-07-31 18:42:43 -07:00
2012-09-03 13:56:04 +02:00
2012-08-14 21:49:10 -07:00
2012-08-31 20:02:18 -04:00
2012-11-15 17:36:17 -05:00
2012-10-02 11:11:09 -07:00
2012-12-07 12:24:33 -05:00
2012-11-03 14:45:00 -04:00
2012-11-18 20:30:55 -05:00
2012-01-20 14:17:26 -05:00
2012-12-13 12:00:02 -08:00
2012-01-20 14:17:26 -05:00
2012-01-11 12:56:06 -08:00
2012-08-31 20:02:18 -04:00
2011-03-10 00:40:17 -08:00
2011-03-10 00:40:17 -08:00
2012-05-17 14:59:59 -04:00
2012-11-01 11:55:59 -04:00
2012-12-26 15:08:55 -08:00
2012-12-14 13:14:07 -05:00
2011-03-31 11:26:23 -03:00
2012-05-29 16:22:28 -07:00
2012-11-16 13:36:27 -05:00
2012-11-10 18:32:51 -05:00
2012-12-12 18:07:07 -08:00
2012-04-15 12:44:40 -04:00
2011-03-10 00:40:17 -08:00
2012-11-10 18:32:51 -05:00
2011-03-10 00:40:17 -08:00
2011-03-10 00:40:17 -08:00
2011-03-10 00:40:17 -08:00
2011-03-31 11:26:23 -03:00
2013-01-10 14:07:19 -08:00
2012-03-11 23:42:51 -07:00
2012-09-10 15:30:41 -04:00
2012-04-15 12:37:19 -04:00
2012-10-02 11:11:09 -07:00
2012-03-12 17:05:21 -07:00
2012-07-26 15:50:39 -07:00
2012-02-23 16:50:45 -05:00
2012-07-18 09:36:12 -07:00
2011-07-01 17:33:19 -07:00
2012-11-13 09:15:07 +01:00
2011-10-31 19:30:30 -04:00
2012-03-12 17:05:21 -07:00