pci_unmap_single(tp->pdev, dma_addr, skb_size,
                                         PCI_DMA_FROMDEVICE);
 
-                       skb = build_skb(data, frag_size);
-                       if (!skb) {
-                               tg3_frag_free(frag_size != 0, data);
-                               goto drop_it_no_recycle;
-                       }
-                       skb_reserve(skb, TG3_RX_OFFSET(tp));
                        /* Ensure that the update to the data happens
                         * after the usage of the old DMA mapping.
                         */
 
                        ri->data = NULL;
 
+                       skb = build_skb(data, frag_size);
+                       if (!skb) {
+                               tg3_frag_free(frag_size != 0, data);
+                               goto drop_it_no_recycle;
+                       }
+                       skb_reserve(skb, TG3_RX_OFFSET(tp));
                } else {
                        tg3_recycle_rx(tnapi, tpr, opaque_key,
                                       desc_idx, *post_ptr);