if (test_bit(FLAG_MPI, &priv->flags)) {
                /* Not implemented yet for MPI350 */
                netif_stop_queue(dev);
-               return -ENETDOWN;
+               dev_kfree_skb_any(skb);
+               return NETDEV_TX_OK;
        }
 
        if ( skb == NULL ) {
 
 static int ipw_prom_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        IPW_DEBUG_INFO("prom dev->xmit\n");
-       return -EOPNOTSUPP;
+       dev_kfree_skb(skb);
+       return NETDEV_TX_OK;
 }
 
 static const struct net_device_ops ipw_prom_netdev_ops = {
 
        unsigned long flags;
        unsigned char wds_mac[6];
        u32 curr_frag;
-       int err = 0;
 
 #if VERBOSE > SHOW_ERROR_MESSAGES
        DEBUG(SHOW_FUNCTION_CALLS, "islpci_eth_transmit \n");
                isl38xx_w32_flush(priv->device_base, ISL38XX_DEV_INT_UPDATE,
                                  ISL38XX_DEV_INT_REG);
                udelay(ISL38XX_WRITEIO_DELAY);
-
-               err = -EBUSY;
                goto drop_free;
        }
        /* Check alignment and WDS frame formatting. The start of the packet should
                        if (unlikely(newskb == NULL)) {
                                printk(KERN_ERR "%s: Cannot allocate skb\n",
                                       ndev->name);
-                               err = -ENOMEM;
                                goto drop_free;
                        }
                        newskb_offset = (4 - (long) newskb->data) & 0x03;
        if (unlikely(pci_map_address == 0)) {
                printk(KERN_WARNING "%s: cannot map buffer to PCI\n",
                       ndev->name);
-
-               err = -EIO;
                goto drop_free;
        }
        /* Place the fragment in the control block structure. */
        ndev->stats.tx_dropped++;
        spin_unlock_irqrestore(&priv->slock, flags);
        dev_kfree_skb(skb);
-       return err;
+       return NETDEV_TX_OK;
 }
 
 static inline int
 
        if (err) {
                dev->stats.tx_errors++;
                netif_start_queue(dev);
-               return err;
+       } else {
+               dev->stats.tx_packets++;
+               dev->stats.tx_bytes += skb->len;
+               dev->trans_start = jiffies;
        }
-       dev->stats.tx_packets++;
-       dev->stats.tx_bytes += skb->len;
-       dev->trans_start = jiffies;
        kfree_skb(skb);
 
        return 0;