]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/packet/af_packet.c
packet: tpacket_v3: do not trigger bug() on wrong header status
[karo-tx-linux.git] / net / packet / af_packet.c
index dd5cd49b0e09e9ac777484aeae3c7ade6755a3b7..8ec1bca7f85908c22534eb2023fef135859997c3 100644 (file)
@@ -742,36 +742,33 @@ static void prb_open_block(struct tpacket_kbdq_core *pkc1,
 
        smp_rmb();
 
-       if (likely(TP_STATUS_KERNEL == BLOCK_STATUS(pbd1))) {
+       /* We could have just memset this but we will lose the
+        * flexibility of making the priv area sticky
+        */
 
-               /* We could have just memset this but we will lose the
-                * flexibility of making the priv area sticky
-                */
-               BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
-               BLOCK_NUM_PKTS(pbd1) = 0;
-               BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
-               getnstimeofday(&ts);
-               h1->ts_first_pkt.ts_sec = ts.tv_sec;
-               h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
-               pkc1->pkblk_start = (char *)pbd1;
-               pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
-               BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
-               BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
-               pbd1->version = pkc1->version;
-               pkc1->prev = pkc1->nxt_offset;
-               pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
-               prb_thaw_queue(pkc1);
-               _prb_refresh_rx_retire_blk_timer(pkc1);
+       BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
+       BLOCK_NUM_PKTS(pbd1) = 0;
+       BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
 
-               smp_wmb();
+       getnstimeofday(&ts);
 
-               return;
-       }
+       h1->ts_first_pkt.ts_sec = ts.tv_sec;
+       h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
 
-       WARN(1, "ERROR block:%p is NOT FREE status:%d kactive_blk_num:%d\n",
-               pbd1, BLOCK_STATUS(pbd1), pkc1->kactive_blk_num);
-       dump_stack();
-       BUG();
+       pkc1->pkblk_start = (char *)pbd1;
+       pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
+
+       BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
+       BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
+
+       pbd1->version = pkc1->version;
+       pkc1->prev = pkc1->nxt_offset;
+       pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
+
+       prb_thaw_queue(pkc1);
+       _prb_refresh_rx_retire_blk_timer(pkc1);
+
+       smp_wmb();
 }
 
 /*
@@ -862,10 +859,6 @@ static void prb_retire_current_block(struct tpacket_kbdq_core *pkc,
                prb_close_block(pkc, pbd, po, status);
                return;
        }
-
-       WARN(1, "ERROR-pbd[%d]:%p\n", pkc->kactive_blk_num, pbd);
-       dump_stack();
-       BUG();
 }
 
 static int prb_curr_blk_in_use(struct tpacket_kbdq_core *pkc,