bug-hurd
[Top][All Lists]
Advanced

[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:43 +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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]