|
@@ -698,6 +698,10 @@ static void prb_retire_rx_blk_timer_expired(unsigned long data)
|
|
|
|
|
|
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;
|
|
@@ -798,7 +802,11 @@ static void prb_close_block(struct tpacket_kbdq_core *pkc1,
|
|
|
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;
|