Michael S. Tsirkin
2010-Jun-10 15:18 UTC
[PATCH for-2.6.35] 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 <mst at redhat.com>
---
Rusty, please review the following patch for 2.6.35.
drivers/net/virtio_net.c | 7 +++----
1 files 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))
--
1.7.1.12.g42b7f
Reasonably Related Threads
- [PATCH for-2.6.35] virtio_net: do not reschedule rx refill forever
- [PATCH] virtio_net: indicate oom when addbuf returns failure
- [PATCH] virtio_net: indicate oom when addbuf returns failure
- [PATCH for-2.6.35] virtio_net: fix oom handling on tx
- [PATCH for-2.6.35] virtio_net: fix oom handling on tx
