struct spider_net_descr *descr;
        dma_addr_t buf;
        unsigned long flags;
-       int length;
 
-       length = skb->len;
-       if (length < ETH_ZLEN) {
-               if (skb_pad(skb, ETH_ZLEN-length))
-                       return 0;
-               length = ETH_ZLEN;
-       }
-
-       buf = pci_map_single(card->pdev, skb->data, length, PCI_DMA_TODEVICE);
+       buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
        if (pci_dma_mapping_error(buf)) {
                if (netif_msg_tx_err(card) && net_ratelimit())
                        pr_err("could not iommu-map packet (%p, %i). "
-                                 "Dropping packet\n", skb->data, length);
+                                 "Dropping packet\n", skb->data, skb->len);
                card->spider_stats.tx_iommu_map_error++;
                return -ENOMEM;
        }
        card->tx_chain.head = descr->next;
 
        descr->buf_addr = buf;
-       descr->buf_size = length;
+       descr->buf_size = skb->len;
        descr->next_descr_addr = 0;
        descr->skb = skb;
        descr->data_status = 0;
 
                /* unmap the skb */
                if (skb) {
-                       int len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
-                       pci_unmap_single(card->pdev, buf_addr, len, PCI_DMA_TODEVICE);
+                       pci_unmap_single(card->pdev, buf_addr, skb->len,
+                                       PCI_DMA_TODEVICE);
                        dev_kfree_skb(skb);
                }
        }