[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Try to re-open network device on transmission error
From: |
rekado |
Subject: |
[PATCH] Try to re-open network device on transmission error |
Date: |
Mon, 9 Sep 2013 21:03:44 +0800 |
Attempt to re-open the network device when device_write fails, e.g. when netdde
has crashed.
---
pfinet/ethernet.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c
index b96c09a..f9fadf1 100644
--- a/pfinet/ethernet.c
+++ b/pfinet/ethernet.c
@@ -241,11 +241,24 @@ ethernet_open (struct device *dev)
int
ethernet_xmit (struct sk_buff *skb, struct device *dev)
{
- error_t err;
+ error_t err = 0;
struct ether_device *edev = (struct ether_device *) dev->priv;
u_int count;
+ short retries = 1;
+
+ do
+ {
+ if (err && retries)
+ {
+ edev->ether_port = MACH_PORT_NULL;
+ ethernet_open (dev);
+ retries--;
+ }
+
+ err = device_write (edev->ether_port, D_NOWAIT, 0, skb->data, skb->len,
&count);
+ }
+ while (err && retries);
- err = device_write (edev->ether_port, D_NOWAIT, 0, skb->data, skb->len,
&count);
assert_perror (err);
assert (count == skb->len);
dev_kfree_skb (skb);
--
1.8.3.1