# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 18abc9eb9a311863529a1b7ee536bf2b3c8b2eb8
# Parent ef80b6e4e03ab973d062f6b3bf9ca023c3ffe922
[NET] back: Fix off-by-one error in netbk_tx_err
The generalised extra request info patch introduced a bug with the use
of netbk_tx_err since it advanced the req_cons pointer by one. This
patch fixes thing by delaying the increment in netbk_tx_err.
Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/drivers/xen/netback/netback.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff -r ef80b6e4e03a -r 18abc9eb9a31
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Mon Jul 03
08:56:29 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Mon Jul 03
08:57:15 2006 +0100
@@ -496,9 +496,9 @@ static void netbk_tx_err(netif_t *netif,
do {
make_tx_response(netif, txp, NETIF_RSP_ERROR);
- if (++cons >= end)
+ if (cons >= end)
break;
- txp = RING_GET_REQUEST(&netif->tx, cons);
+ txp = RING_GET_REQUEST(&netif->tx, cons++);
} while (1);
netif->tx.req_cons = cons;
netif_schedule_work(netif);
@@ -764,11 +764,11 @@ static void net_tx_action(unsigned long
if (txreq.flags & NETTXF_extra_info) {
work_to_do = netbk_get_extras(netif, extras,
work_to_do);
+ i = netif->tx.req_cons;
if (unlikely(work_to_do < 0)) {
- netbk_tx_err(netif, &txreq, 0);
+ netbk_tx_err(netif, &txreq, i);
continue;
}
- i = netif->tx.req_cons;
}
ret = netbk_count_requests(netif, &txreq, work_to_do);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|