Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c	(revision 15978)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c	(revision 15979)
@@ -478,4 +478,20 @@
     }
 
+#ifndef VBOXNETFLT_SG_SUPPORT
+    {
+        /*
+         * Get rid of fragmented packets, they cause too much trouble.
+         */
+        struct sk_buff *pCopy = skb_copy(pBuf, GFP_ATOMIC);
+        kfree_skb(pBuf);
+        if (!pCopy)
+        {
+            LogRel(("VBoxNetFlt: Failed to allocate packet buffer, dropping the packet.\n"));
+            return 0;
+        }
+        pBuf = pCopy;
+    }
+#endif
+
     /* Add the packet to transmit queue and schedule the bottom half. */
     skb_queue_tail(&pThis->u.s.XmitQueue, pBuf);
@@ -552,18 +568,4 @@
 {
     uint32_t fSrc = pBuf->pkt_type == PACKET_OUTGOING ? INTNETTRUNKDIR_HOST : INTNETTRUNKDIR_WIRE;
-
-#ifndef VBOXNETFLT_SG_SUPPORT
-    /*
-     * Get rid of fragmented packets, they cause too much trouble.
-     */
-    struct sk_buff *pCopy = skb_copy(pBuf, GFP_KERNEL);
-    kfree_skb(pBuf);
-    if (!pCopy)
-    {
-        LogRel(("VBoxNetFlt: Failed to allocate packet buffer, dropping the packet.\n"));
-        return;
-    }
-    pBuf = pCopy;
-#endif
 
     if (VBOX_SKB_IS_GSO(pBuf))
