]> err.no Git - linux-2.6/blobdiff - drivers/s390/net/ctcmain.c
firewire: cleanups
[linux-2.6] / drivers / s390 / net / ctcmain.c
index 6bf3ebbe985a9a000d92fbe449ab5eb073cc03fc..77a503139e327fe7d1597c8aec6bf43b0301b438 100644 (file)
@@ -478,14 +478,14 @@ ctc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
                skb->dev = pskb->dev;
                skb->protocol = pskb->protocol;
                pskb->ip_summed = CHECKSUM_UNNECESSARY;
-               netif_rx_ni(skb);
                /**
-                * Successful rx; reset logflags
+                * reset logflags
                 */
                ch->logflags = 0;
-               dev->last_rx = jiffies;
                privptr->stats.rx_packets++;
                privptr->stats.rx_bytes += skb->len;
+               netif_rx_ni(skb);
+               dev->last_rx = jiffies;
                if (len > 0) {
                        skb_pull(pskb, header->length);
                        if (skb_tailroom(pskb) < LL_HEADER_LENGTH) {
@@ -2782,35 +2782,14 @@ ctc_probe_device(struct ccwgroup_device *cgdev)
 }
 
 /**
- * Initialize everything of the net device except the name and the
- * channel structs.
+ * Device setup function called by alloc_netdev().
+ *
+ * @param dev  Device to be setup.
  */
-static struct net_device *
-ctc_init_netdevice(struct net_device * dev, int alloc_device,
-                  struct ctc_priv *privptr)
+void ctc_init_netdevice(struct net_device * dev)
 {
-       if (!privptr)
-               return NULL;
-
        DBF_TEXT(setup, 3, __FUNCTION__);
 
-       if (alloc_device) {
-               dev = kzalloc(sizeof(struct net_device), GFP_KERNEL);
-               if (!dev)
-                       return NULL;
-       }
-
-       dev->priv = privptr;
-       privptr->fsm = init_fsm("ctcdev", dev_state_names,
-                               dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
-                               dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
-       if (privptr->fsm == NULL) {
-               if (alloc_device)
-                       kfree(dev);
-               return NULL;
-       }
-       fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
-       fsm_settimer(privptr->fsm, &privptr->restart_timer);
        if (dev->mtu == 0)
                dev->mtu = CTC_BUFSIZE_DEFAULT - LL_HEADER_LENGTH - 2;
        dev->hard_start_xmit = ctc_tx;
@@ -2823,7 +2802,6 @@ ctc_init_netdevice(struct net_device * dev, int alloc_device,
        dev->type = ARPHRD_SLIP;
        dev->tx_queue_len = 100;
        dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-       return dev;
 }
 
 
@@ -2879,14 +2857,22 @@ ctc_new_device(struct ccwgroup_device *cgdev)
                        "ccw_device_set_online (cdev[1]) failed with ret = %d\n", ret);
        }
 
-       dev = ctc_init_netdevice(NULL, 1, privptr);
-
+       dev = alloc_netdev(0, "ctc%d", ctc_init_netdevice);
        if (!dev) {
                ctc_pr_warn("ctc_init_netdevice failed\n");
                goto out;
        }
+       dev->priv = privptr;
 
-       strlcpy(dev->name, "ctc%d", IFNAMSIZ);
+       privptr->fsm = init_fsm("ctcdev", dev_state_names,
+                       dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
+                       dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
+       if (privptr->fsm == NULL) {
+               free_netdev(dev);
+               goto out;
+       }
+       fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
+       fsm_settimer(privptr->fsm, &privptr->restart_timer);
 
        for (direction = READ; direction <= WRITE; direction++) {
                privptr->channel[direction] =