skb->data,
                                                          skb_headlen(skb),
                                                          DMA_TO_DEVICE);
+                               if (dma_mapping_error(&adapter->pdev->dev,
+                                                     dma_addr))
+                                       return -ENOMEM;
+
                                desc[frag].addr_lo = lower_32_bits(dma_addr);
                                desc[frag].addr_hi = upper_32_bits(dma_addr);
                                frag++;
                                                          skb->data,
                                                          skb_headlen(skb) / 2,
                                                          DMA_TO_DEVICE);
+                               if (dma_mapping_error(&adapter->pdev->dev,
+                                                     dma_addr))
+                                       return -ENOMEM;
+
                                desc[frag].addr_lo = lower_32_bits(dma_addr);
                                desc[frag].addr_hi = upper_32_bits(dma_addr);
                                frag++;
                                                          skb_headlen(skb) / 2,
                                                          skb_headlen(skb) / 2,
                                                          DMA_TO_DEVICE);
+                               if (dma_mapping_error(&adapter->pdev->dev,
+                                                     dma_addr))
+                                       goto unmap_first_out;
+
                                desc[frag].addr_lo = lower_32_bits(dma_addr);
                                desc[frag].addr_hi = upper_32_bits(dma_addr);
                                frag++;
                                                    0,
                                                    desc[frag].len_vlan,
                                                    DMA_TO_DEVICE);
+                       if (dma_mapping_error(&adapter->pdev->dev, dma_addr))
+                               goto unmap_out;
+
                        desc[frag].addr_lo = lower_32_bits(dma_addr);
                        desc[frag].addr_hi = upper_32_bits(dma_addr);
                        frag++;
                       &adapter->regs->global.watchdog_timer);
        }
        return 0;
+
+unmap_out:
+       // Unmap the body of the packet with map_page
+       while (--i) {
+               frag--;
+               dma_addr = desc[frag].addr_lo;
+               dma_addr |= (u64)desc[frag].addr_hi << 32;
+               dma_unmap_page(&adapter->pdev->dev, dma_addr,
+                              desc[frag].len_vlan, DMA_TO_DEVICE);
+       }
+
+unmap_first_out:
+       // Unmap the header with map_single
+       while (frag--) {
+               dma_addr = desc[frag].addr_lo;
+               dma_addr |= (u64)desc[frag].addr_hi << 32;
+               dma_unmap_single(&adapter->pdev->dev, dma_addr,
+                                desc[frag].len_vlan, DMA_TO_DEVICE);
+       }
+
+       return -ENOMEM;
 }
 
 static int send_packet(struct sk_buff *skb, struct et131x_adapter *adapter)