]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/s390/net/lcs.c
lcs: invalid return codes from hard_start_xmit.
[karo-tx-linux.git] / drivers / s390 / net / lcs.c
index 49c3bfa1afd7c364eea57e017f0e35be84ccf8e7..a45bc24eb5f91627c03eabc94575a71ed0a6053f 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/in.h>
 #include <linux/igmp.h>
 #include <linux/delay.h>
+#include <linux/kthread.h>
 #include <net/arp.h>
 #include <net/ip.h>
 
@@ -1259,7 +1260,6 @@ lcs_register_mc_addresses(void *data)
        struct in_device *in4_dev;
 
        card = (struct lcs_card *) data;
-       daemonize("regipm");
 
        if (!lcs_do_run_thread(card, LCS_SET_MC_THREAD))
                return 0;
@@ -1562,7 +1562,7 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
        if (skb == NULL) {
                card->stats.tx_dropped++;
                card->stats.tx_errors++;
-               return -EIO;
+               return 0;
        }
        if (card->state != DEV_STATE_UP) {
                dev_kfree_skb(skb);
@@ -1587,7 +1587,7 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
                card->tx_buffer = lcs_get_buffer(&card->write);
                if (card->tx_buffer == NULL) {
                        card->stats.tx_dropped++;
-                       rc = -EBUSY;
+                       rc = NETDEV_TX_BUSY;
                        goto out;
                }
                card->tx_buffer->callback = lcs_txbuffer_cb;
@@ -1753,11 +1753,10 @@ lcs_start_kernel_thread(struct work_struct *work)
        struct lcs_card *card = container_of(work, struct lcs_card, kernel_thread_starter);
        LCS_DBF_TEXT(5, trace, "krnthrd");
        if (lcs_do_start_thread(card, LCS_RECOVERY_THREAD))
-               kernel_thread(lcs_recovery, (void *) card, SIGCHLD);
+               kthread_run(lcs_recovery, card, "lcs_recover");
 #ifdef CONFIG_IP_MULTICAST
        if (lcs_do_start_thread(card, LCS_SET_MC_THREAD))
-               kernel_thread(lcs_register_mc_addresses,
-                               (void *) card, SIGCHLD);
+               kthread_run(lcs_register_mc_addresses, card, "regipm");
 #endif
 }
 
@@ -2101,6 +2100,20 @@ lcs_register_netdev(struct ccwgroup_device *ccwgdev)
 /**
  * lcs_new_device will be called by setting the group device online.
  */
+static const struct net_device_ops lcs_netdev_ops = {
+       .ndo_open               = lcs_open_device,
+       .ndo_stop               = lcs_stop_device,
+       .ndo_get_stats          = lcs_getstats,
+       .ndo_start_xmit         = lcs_start_xmit,
+};
+
+static const struct net_device_ops lcs_mc_netdev_ops = {
+       .ndo_open               = lcs_open_device,
+       .ndo_stop               = lcs_stop_device,
+       .ndo_get_stats          = lcs_getstats,
+       .ndo_start_xmit         = lcs_start_xmit,
+       .ndo_set_multicast_list = lcs_set_multicast_list,
+};
 
 static int
 lcs_new_device(struct ccwgroup_device *ccwgdev)
@@ -2168,14 +2181,11 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
                goto out;
        card->dev = dev;
        card->dev->ml_priv = card;
-       card->dev->open = lcs_open_device;
-       card->dev->stop = lcs_stop_device;
-       card->dev->hard_start_xmit = lcs_start_xmit;
-       card->dev->get_stats = lcs_getstats;
+       card->dev->netdev_ops = &lcs_netdev_ops;
        memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH);
 #ifdef CONFIG_IP_MULTICAST
        if (!lcs_check_multicast_support(card))
-               card->dev->set_multicast_list = lcs_set_multicast_list;
+               card->dev->netdev_ops = &lcs_mc_netdev_ops;
 #endif
 netdev_out:
        lcs_set_allowed_threads(card,0xffffffff);
@@ -2258,7 +2268,6 @@ lcs_recovery(void *ptr)
         int rc;
 
        card = (struct lcs_card *) ptr;
-       daemonize("lcs_recover");
 
        LCS_DBF_TEXT(4, trace, "recover1");
        if (!lcs_do_run_thread(card, LCS_RECOVERY_THREAD))