> -----Original Message----- > From: Olaf Hering [mailto:o...@aepfle.de] > Sent: Friday, June 14, 2013 11:29 AM > To: Haiyang Zhang > Cc: da...@davemloft.net; net...@vger.kernel.org; KY Srinivasan; > jasow...@redhat.com; linux-kernel@vger.kernel.org; > de...@linuxdriverproject.org > Subject: Re: [PATCH net] hyperv: Fix vlan_proto setting in > netvsc_recv_callback() > > On Tue, May 28, Haiyang Zhang wrote: > > > Since the recent addition of 8021AD, we need to set the new field > > vlan_proto in sk_buff. Otherwise, it will trigger BUG() call in > vlan_proto_idx(). > > > @@ -284,7 +285,7 @@ int netvsc_recv_callback(struct hv_device > > *device_obj, > > > > skb->protocol = eth_type_trans(skb, net); > > skb->ip_summed = CHECKSUM_NONE; > > - skb->vlan_tci = packet->vlan_tci; > > + __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), packet- > >vlan_tci); > > > Just curious: > > Doesnt that change behaviour in the sense that __vlan_hwaccel_put_tag() > now always adds VLAN_TAG_PRESENT to skb->vlan_tci, while before that > change packet->vlan_tci may or may not had this flag? > > In other words, should a variant of this patch be backported if it was a bug > not not use __vlan_hwaccel_put_tag right from the start? >
Thanks for looking at this. Actually, the previous code was correct, because I add the VLAN_TAG_PRESENT if the packet comes from vlan in function rndis_filter_receive_data(): if (vlan) { pkt->vlan_tci = VLAN_TAG_PRESENT | vlan->vlanid | (vlan->pri << VLAN_PRIO_SHIFT); } else { pkt->vlan_tci = 0; } But, the new code should be updated below, so the VLAN_TAG_PRESENT won't be set when it's not from a vlan: If (VLAN_TAG_PRESENT & packet->vlan_tci) __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), packet- vlan_tci); I will submit a patch soon. Thanks, - Haiyang