--- /dev/null
+From 41a50d621a321b4c15273cc1b5ed41437f4acdfb Mon Sep 17 00:00:00 2001
+From: Alexander Drozdov <al.drozdov@gmail.com>
+Date: Tue, 24 Feb 2015 08:18:28 +0300
+Subject: af_packet: don't pass empty blocks for PACKET_V3
+
+From: Alexander Drozdov <al.drozdov@gmail.com>
+
+commit 41a50d621a321b4c15273cc1b5ed41437f4acdfb upstream.
+
+Before da413eec729d ("packet: Fixed TPACKET V3 to signal poll when block is
+closed rather than every packet") poll listening for an af_packet socket was
+not signaled if there was no packets to process. After the patch poll is
+signaled evety time when block retire timer expires. That happens because
+af_packet closes the current block on timeout even if the block is empty.
+
+Passing empty blocks to the user not only wastes CPU but also wastes ring
+buffer space increasing probability of packets dropping on small timeouts.
+
+Signed-off-by: Alexander Drozdov <al.drozdov@gmail.com>
+Cc: Dan Collins <dan@dcollins.co.nz>
+Cc: Willem de Bruijn <willemb@google.com>
+Cc: Guy Harris <guy@alum.mit.edu>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Christoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/packet/af_packet.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -697,6 +697,10 @@ static void prb_retire_rx_blk_timer_expi
+
+ if (pkc->last_kactive_blk_num == pkc->kactive_blk_num) {
+ if (!frozen) {
++ if (!BLOCK_NUM_PKTS(pbd)) {
++ /* An empty block. Just refresh the timer. */
++ goto refresh_timer;
++ }
+ prb_retire_current_block(pkc, po, TP_STATUS_BLK_TMO);
+ if (!prb_dispatch_next_block(pkc, po))
+ goto refresh_timer;
+@@ -796,7 +800,11 @@ static void prb_close_block(struct tpack
+ h1->ts_last_pkt.ts_sec = last_pkt->tp_sec;
+ h1->ts_last_pkt.ts_nsec = last_pkt->tp_nsec;
+ } else {
+- /* Ok, we tmo'd - so get the current time */
++ /* Ok, we tmo'd - so get the current time.
++ *
++ * It shouldn't really happen as we don't close empty
++ * blocks. See prb_retire_rx_blk_timer_expired().
++ */
+ struct timespec ts;
+ getnstimeofday(&ts);
+ h1->ts_last_pkt.ts_sec = ts.tv_sec;