mac802154: common tx error path
[cascardo/linux.git] / net / mac802154 / tx.c
index 8124353..fdf4c0e 100644 (file)
@@ -89,8 +89,7 @@ netdev_tx_t mac802154_tx(struct mac802154_priv *priv, struct sk_buff *skb,
 
        if (!(priv->phy->channels_supported[page] & (1 << chan))) {
                WARN_ON(1);
-               kfree_skb(skb);
-               return NETDEV_TX_OK;
+               goto err_tx;
        }
 
        mac802154_monitors_rx(mac802154_to_priv(&priv->hw), skb);
@@ -103,12 +102,10 @@ netdev_tx_t mac802154_tx(struct mac802154_priv *priv, struct sk_buff *skb,
                data[1] = crc >> 8;
        }
 
-       if (skb_cow_head(skb, priv->hw.extra_tx_headroom)) {
-               kfree_skb(skb);
-               return NETDEV_TX_OK;
-       }
+       if (skb_cow_head(skb, priv->hw.extra_tx_headroom))
+               goto err_tx;
 
-       work = kzalloc(sizeof(struct xmit_work), GFP_ATOMIC);
+       work = kzalloc(sizeof(*work), GFP_ATOMIC);
        if (!work) {
                kfree_skb(skb);
                return NETDEV_TX_BUSY;
@@ -129,4 +126,8 @@ netdev_tx_t mac802154_tx(struct mac802154_priv *priv, struct sk_buff *skb,
        queue_work(priv->dev_workqueue, &work->work);
 
        return NETDEV_TX_OK;
+
+err_tx:
+       kfree_skb(skb);
+       return NETDEV_TX_OK;
 }