diff options
Diffstat (limited to 'net/packet/af_packet.c')
| -rw-r--r-- | net/packet/af_packet.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index ceaca7c134a..aee7196aac3 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1079,7 +1079,7 @@ static void *packet_current_rx_frame(struct packet_sock *po,  	default:  		WARN(1, "TPACKET version not supported\n");  		BUG(); -		return 0; +		return NULL;  	}  } @@ -1273,6 +1273,14 @@ static void __fanout_unlink(struct sock *sk, struct packet_sock *po)  	spin_unlock(&f->lock);  } +bool match_fanout_group(struct packet_type *ptype, struct sock * sk) +{ +	if (ptype->af_packet_priv == (void*)((struct packet_sock *)sk)->fanout) +		return true; + +	return false; +} +  static int fanout_add(struct sock *sk, u16 id, u16 type_flags)  {  	struct packet_sock *po = pkt_sk(sk); @@ -1325,6 +1333,7 @@ static int fanout_add(struct sock *sk, u16 id, u16 type_flags)  		match->prot_hook.dev = po->prot_hook.dev;  		match->prot_hook.func = packet_rcv_fanout;  		match->prot_hook.af_packet_priv = match; +		match->prot_hook.id_match = match_fanout_group;  		dev_add_pack(&match->prot_hook);  		list_add(&match->list, &fanout_list);  	} @@ -1936,7 +1945,6 @@ static void tpacket_destruct_skb(struct sk_buff *skb)  	if (likely(po->tx_ring.pg_vec)) {  		ph = skb_shinfo(skb)->destructor_arg; -		BUG_ON(__packet_get_status(po, ph) != TP_STATUS_SENDING);  		BUG_ON(atomic_read(&po->tx_ring.pending) == 0);  		atomic_dec(&po->tx_ring.pending);  		__packet_set_status(po, ph, TP_STATUS_AVAILABLE);  |