Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c	(revision 30050)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c	(revision 30051)
@@ -182,4 +182,5 @@
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27)
+#define qdisc_pkt_len(skb) (skb->len)
 #define QDISC_GET(dev) (dev->qdisc_sleeping)
 #else
@@ -336,4 +337,21 @@
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
+static int vboxNetFltQdiscRequeue(struct sk_buff *skb, struct Qdisc *sch)
+{
+    int rc;
+    PVBOXNETQDISCPRIV pPriv = qdisc_priv(sch);
+
+    rc = pPriv->pChild->ops->requeue(skb, pPriv->pChild);
+    if (rc == 0)
+    {
+        sch->q.qlen++;
+        sch->qstats.requeues++;
+    }
+
+    return rc;
+}
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) */
+
 static unsigned int vboxNetFltQdiscDrop(struct Qdisc *sch)
 {
@@ -413,5 +431,9 @@
     *ppOld = pPriv->pChild;
     pPriv->pChild = pNew;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
     qdisc_tree_decrease_qlen(*ppOld, (*ppOld)->q.qlen);
+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) */
+    sch->q.qlen = 0;
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) */
     qdisc_reset(*ppOld);
     sch_tree_unlock(sch);
@@ -498,5 +520,9 @@
     .enqueue   = vboxNetFltQdiscEnqueue,
     .dequeue   = vboxNetFltQdiscDequeue,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
+    .requeue   = vboxNetFltQdiscRequeue,
+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */
     .peek      = qdisc_peek_dequeued,
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */
     .drop      = vboxNetFltQdiscDrop,
     .init      = vboxNetFltQdiscInit,
