[PATCH] orinoco: refactor and clean up Tx error handling
The result of orinoco_xmit() can be OK, dropped packet and busy transmitter. Rename labels accordingly. Increment stats->tx_errors in one place. Increment stats->tx_dropped - nobody is doing it for us. Signed-off-by: Pavel Roskin <proski@gnu.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
8d5be08826
commit
470e2aa6db
@ -449,16 +449,13 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
/* Oops, the firmware hasn't established a connection,
|
/* Oops, the firmware hasn't established a connection,
|
||||||
silently drop the packet (this seems to be the
|
silently drop the packet (this seems to be the
|
||||||
safest approach). */
|
safest approach). */
|
||||||
stats->tx_errors++;
|
goto drop;
|
||||||
orinoco_unlock(priv, &flags);
|
|
||||||
dev_kfree_skb(skb);
|
|
||||||
return NETDEV_TX_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check packet length */
|
/* Check packet length */
|
||||||
data_len = skb->len;
|
data_len = skb->len;
|
||||||
if (data_len < ETH_HLEN)
|
if (data_len < ETH_HLEN)
|
||||||
goto fail;
|
goto drop;
|
||||||
|
|
||||||
eh = (struct ethhdr *)skb->data;
|
eh = (struct ethhdr *)skb->data;
|
||||||
|
|
||||||
@ -469,8 +466,7 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
printk(KERN_ERR "%s: Error %d writing Tx descriptor "
|
printk(KERN_ERR "%s: Error %d writing Tx descriptor "
|
||||||
"to BAP\n", dev->name, err);
|
"to BAP\n", dev->name, err);
|
||||||
stats->tx_errors++;
|
goto busy;
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear the 802.11 header and data length fields - some
|
/* Clear the 802.11 header and data length fields - some
|
||||||
@ -501,8 +497,7 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
printk(KERN_ERR "%s: Error %d writing packet "
|
printk(KERN_ERR "%s: Error %d writing packet "
|
||||||
"header to BAP\n", dev->name, err);
|
"header to BAP\n", dev->name, err);
|
||||||
stats->tx_errors++;
|
goto busy;
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
} else { /* IEEE 802.3 frame */
|
} else { /* IEEE 802.3 frame */
|
||||||
data_len = skb->len;
|
data_len = skb->len;
|
||||||
@ -515,8 +510,7 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (err) {
|
if (err) {
|
||||||
printk(KERN_ERR "%s: Error %d writing packet to BAP\n",
|
printk(KERN_ERR "%s: Error %d writing packet to BAP\n",
|
||||||
dev->name, err);
|
dev->name, err);
|
||||||
stats->tx_errors++;
|
goto busy;
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finally, we actually initiate the send */
|
/* Finally, we actually initiate the send */
|
||||||
@ -529,20 +523,23 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
printk(KERN_ERR "%s: Error %d transmitting packet\n",
|
printk(KERN_ERR "%s: Error %d transmitting packet\n",
|
||||||
dev->name, err);
|
dev->name, err);
|
||||||
stats->tx_errors++;
|
goto busy;
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->trans_start = jiffies;
|
dev->trans_start = jiffies;
|
||||||
stats->tx_bytes += data_off + data_len;
|
stats->tx_bytes += data_off + data_len;
|
||||||
|
goto ok;
|
||||||
|
|
||||||
|
drop:
|
||||||
|
stats->tx_errors++;
|
||||||
|
stats->tx_dropped++;
|
||||||
|
|
||||||
|
ok:
|
||||||
orinoco_unlock(priv, &flags);
|
orinoco_unlock(priv, &flags);
|
||||||
|
|
||||||
dev_kfree_skb(skb);
|
dev_kfree_skb(skb);
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
fail:
|
|
||||||
|
|
||||||
|
busy:
|
||||||
orinoco_unlock(priv, &flags);
|
orinoco_unlock(priv, &flags);
|
||||||
return NETDEV_TX_BUSY;
|
return NETDEV_TX_BUSY;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user