All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] virtio_net: do not reschedule rx refill forever
@ 2010-07-03  2:32 Rusty Russell
  2010-07-03  2:34 ` [PATCH 2/2] virtio_net: fix oom handling on tx Rusty Russell
  2010-07-03  5:29 ` [PATCH 1/2] virtio_net: do not reschedule rx refill forever David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Rusty Russell @ 2010-07-03  2:32 UTC (permalink / raw)
  To: netdev; +Cc: Michael S. Tsirkin

From: "Michael S. Tsirkin" <mst@redhat.com>

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 <mst@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: stable@kernel.org # .34.x
---
 drivers/net/virtio_net.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 06c30df..85615a3 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -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))

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-07-03  5:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-03  2:32 [PATCH 1/2] virtio_net: do not reschedule rx refill forever Rusty Russell
2010-07-03  2:34 ` [PATCH 2/2] virtio_net: fix oom handling on tx Rusty Russell
2010-07-03  5:29   ` David Miller
2010-07-03  5:29 ` [PATCH 1/2] virtio_net: do not reschedule rx refill forever David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.