diff -urpN pcap-linux.c.orig pcap-linux.c
--- pcap-linux.c.orig   2009-12-26 10:56:30.000000000 +0100
+++ pcap-linux.c        2009-12-28 15:11:38.000000000 +0100
@@ -1933,6 +1933,7 @@ pcap_setfilter_linux_common(pcap_t *hand
                return -1;
 #endif /* SO_ATTACH_FILTER */

+       printf("Using %s filter\n", handle->md.use_bpf?"kernel":"userland");
        return 0;
 }

@@ -3072,23 +3073,6 @@ pcap_read_linux_mmap(pcap_t *handle, int
                        return -1;
                }

-               /* run filter on received packet
-                * If the kernel filtering is enabled we need to run the
-                * filter until all the frames present into the ring
-                * at filter creation time are processed.
-                * In such case md.use_bpf is used as a counter for the
-                * packet we need to filter.
-                * Note: alternatively it could be possible to stop applying
-                * the filter when the ring became empty, but it can
possibly
-                * happen a lot later... */
-               bp = (unsigned char*)h.raw + tp_mac;
-               run_bpf = (!handle->md.use_bpf) ||
-                       ((handle->md.use_bpf>1) && handle->md.use_bpf--);
-               if (run_bpf && handle->fcode.bf_insns &&
-                               (bpf_filter(handle->fcode.bf_insns, bp,
-                                       tp_len, tp_snaplen) == 0))
-                       goto skip;
-
                /*
                 * Do checks based on packet direction.
