virtio_net: do not reschedule rx refill forever
Subsystems (3)
Michael S. Tsirkin
maintainerPATCH 1/1 virtio_net: do not reschedule rx refill forever
We currently fill all of RX ring, then add_buf returns ENOSPC, which gets mis-detected as an out of memory condition and causes us to reschedule the work, and so on forever. Fix this by oom = err == -ENOMEM;
Signed-off-by Michael S. Tsirkin <[email protected]>
---
Rusty, please review the following patch for 2.6.35.
drivers/net/virtio_net.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
drivers/net/virtio_net.c +3 -4
@@ -416,7 +416,7 @@ static int add_recvbuf_mergeable(struct virtnet_info *vi, gfp_t gfp)static bool try_fill_recv (struct virtnet_info *vi,gfp_t gfp) {int err; -bool oom = false; +bool oom; do { if (vi->mergeable_rx_bufs)
@@ -426,10 +426,9 @@ static bool try_fill_recv(struct virtnet_info *vi, gfp_t gfp)else err =add_recvbuf_small (vi, gfp); -if (err <0 ) { - oom = true; + oom = err == -ENOMEM ; +if (err <0 )break ; - } ++vi->num; }while (err >0 );if (unlikely (vi->num > vi->max))
Signature · 1 line
1.7.1.12.g42b7f