From: ebiederm@xmission•com (Eric W. Biederman)
To: David Miller <davem@davemloft•net>
Cc: shemminger@linux-foundation•org, greearb@candelatech•com,
nicolas.2p.debian@gmail•com, jpirko@redhat•com,
xiaosuo@gmail•com, netdev@vger•kernel.org, kaber@trash•net,
fubar@us•ibm.com, eric.dumazet@gmail•com, andy@greyhouse•net,
jesse@nicira•com
Subject: Re: [PATCH] vlan: Fix the b0rked ingress VLAN_FLAG_REORDER_HDR check.
Date: Tue, 24 May 2011 00:38:34 -0700 [thread overview]
Message-ID: <m1oc2spmyt.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <20110524.022406.2228892895515155850.davem@davemloft.net> (David Miller's message of "Tue, 24 May 2011 02:24:06 -0400 (EDT)")
David Miller <davem@davemloft•net> writes:
> From: ebiederm@xmission•com (Eric W. Biederman)
> Date: Mon, 23 May 2011 23:18:02 -0700
>
>> Feel free to read through the code, to convince yourself it is correct.
>> In addition the code is untouched from the vlan header insertion for
>> emulation of vlan header acceleration in dev_hard_start_xmit() which
>> presumably has been working for quite awhile.
>
> I'm not keeping code there that does eth_hdr(skb)->foo when there
> can be either a vlan_hdr(skb) or a eth_hdr(skb) there.
>
> That's just asking for trouble.
How so? eth_hdr(skb) is a proper subset of vlan_hdr(skb)?
vlan_insert_tag() moves the ethernet header to make space for the vlan
header after it, but before the rest of the data. With the appropriate
fixups applied to the skb->mac_pointer.
I can see not leaving a vlan_hdr(skb) reference, but beyond that I'm
not seeing the problem.
Certainly we need to do the insert before we update the statics or
we will get rx_bytes wrong.
Would you be happier if the pkt_type check was moved earlier in the
function like say:
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index c08dae7..7571637 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -22,21 +22,6 @@ bool vlan_do_receive(struct sk_buff **skbp)
if (unlikely(!skb))
return false;
- skb->dev = vlan_dev;
- if (unlikely(!(vlan_dev_info(vlan_dev)->flags & VLAN_FLAG_REORDER_HDR))) {
- skb = *skbp = vlan_insert_tag(skb, skb->vlan_tci);
- if (!skb)
- return false;
- }
- skb->priority = vlan_get_ingress_priority(vlan_dev, skb->vlan_tci);
- skb->vlan_tci = 0;
-
- rx_stats = this_cpu_ptr(vlan_dev_info(vlan_dev)->vlan_pcpu_stats);
-
- u64_stats_update_begin(&rx_stats->syncp);
- rx_stats->rx_packets++;
- rx_stats->rx_bytes += skb->len;
-
switch (skb->pkt_type) {
case PACKET_BROADCAST:
break;
@@ -52,6 +37,21 @@ bool vlan_do_receive(struct sk_buff **skbp)
skb->pkt_type = PACKET_HOST;
break;
}
+
+ skb->dev = vlan_dev;
+ if (unlikely(!(vlan_dev_info(vlan_dev)->flags & VLAN_FLAG_REORDER_HDR))) {
+ skb = *skbp = vlan_insert_tag(skb, skb->vlan_tci);
+ if (!skb)
+ return false;
+ }
+ skb->priority = vlan_get_ingress_priority(vlan_dev, skb->vlan_tci);
+ skb->vlan_tci = 0;
+
+ rx_stats = this_cpu_ptr(vlan_dev_info(vlan_dev)->vlan_pcpu_stats);
+
+ u64_stats_update_begin(&rx_stats->syncp);
+ rx_stats->rx_packets++;
+ rx_stats->rx_bytes += skb->len;
u64_stats_update_end(&rx_stats->syncp);
return true;
Eric
next prev parent reply other threads:[~2011-05-24 7:38 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-08 5:48 [patch net-next-2.6 v2] net: vlan: make non-hw-accel rx path similar to hw-accel Jiri Pirko
2011-04-12 21:16 ` David Miller
2011-05-21 1:11 ` Changli Gao
2011-05-21 7:29 ` Jiri Pirko
2011-05-21 10:43 ` Changli Gao
2011-05-21 13:17 ` Nicolas de Pesloüan
2011-05-21 17:54 ` Jesse Gross
2011-05-21 22:15 ` Stephen Hemminger
2011-05-22 2:59 ` Nicolas de Pesloüan
2011-05-22 6:29 ` Jiri Pirko
2011-05-22 6:34 ` Eric W. Biederman
2011-05-22 8:34 ` Nicolas de Pesloüan
2011-05-22 8:52 ` Michał Mirosław
2011-05-22 9:10 ` Nicolas de Pesloüan
2011-05-22 9:20 ` Michał Mirosław
2011-05-22 9:36 ` Jiri Pirko
2011-05-22 9:53 ` Nicolas de Pesloüan
2011-05-22 10:04 ` Michał Mirosław
2011-05-22 16:11 ` Jesse Gross
2011-05-22 18:24 ` Eric W. Biederman
2011-05-22 19:33 ` Eric W. Biederman
2011-05-22 19:39 ` [PATCH 1/3] vlan: Do not support clearing VLAN_FLAG_REORDER_HDR Eric W. Biederman
2011-05-22 19:40 ` [PATCH 2/3] vlan: Always strip the vlan header in vlan_untag Eric W. Biederman
2011-05-22 19:42 ` [PATCH 3/3] vlan: Simplify the code now that VLAN_FLAG_REORDER_HDR is always set Eric W. Biederman
2011-06-09 10:59 ` Jiri Pirko
2011-06-12 6:17 ` Eric W. Biederman
2011-05-22 21:04 ` [PATCH 1/3] vlan: Do not support clearing VLAN_FLAG_REORDER_HDR Ben Greear
2011-05-22 22:38 ` Eric W. Biederman
2011-05-23 0:38 ` Changli Gao
2011-05-23 1:26 ` Changli Gao
2011-05-23 1:45 ` Eric W. Biederman
2011-05-23 2:14 ` Changli Gao
2011-05-23 9:41 ` Eric W. Biederman
2011-05-23 10:43 ` Jiri Pirko
2011-05-23 19:48 ` Nicolas de Pesloüan
2011-05-24 5:58 ` Jiri Pirko
2011-05-24 7:19 ` Nicolas de Pesloüan
2011-05-23 1:39 ` Eric W. Biederman
2011-05-23 6:01 ` Ben Greear
2011-05-23 9:00 ` Eric W. Biederman
2011-05-23 16:33 ` Ben Greear
2011-05-23 19:36 ` Nicolas de Pesloüan
2011-05-23 20:24 ` Ben Greear
2011-05-23 21:00 ` Stephen Hemminger
2011-05-23 21:20 ` David Miller
2011-05-23 22:05 ` Eric W. Biederman
2011-05-23 22:16 ` Stephen Hemminger
2011-05-23 22:48 ` Eric W. Biederman
2011-05-23 22:23 ` Ben Greear
2011-05-23 23:02 ` Eric W. Biederman
2011-05-24 4:20 ` Ben Greear
2011-05-24 7:11 ` Nicolas de Pesloüan
2011-05-24 7:44 ` Michał Mirosław
2011-05-24 15:17 ` Ben Greear
2011-05-24 5:19 ` David Miller
2011-05-24 7:56 ` Eric W. Biederman
2011-05-24 15:44 ` Ben Greear
2011-05-24 0:11 ` [PATCH] vlan: Fix the b0rked ingress VLAN_FLAG_REORDER_HDR check Eric W. Biederman
2011-05-24 4:54 ` David Miller
2011-05-24 6:18 ` Eric W. Biederman
2011-05-24 6:24 ` David Miller
2011-05-24 7:38 ` Eric W. Biederman [this message]
2011-06-02 3:59 ` David Miller
2011-06-02 13:03 ` [PATCH] vlan: Fix the ingress VLAN_FLAG_REORDER_HDR check v2 Eric W. Biederman
2011-06-02 13:15 ` Jiri Pirko
2011-06-02 14:54 ` Changli Gao
2011-06-02 15:26 ` Eric W. Biederman
2011-06-02 23:18 ` Changli Gao
2011-06-06 14:48 ` Jiri Pirko
2011-06-03 3:34 ` padmanabh ratnakar
2011-06-03 3:59 ` Changli Gao
2011-06-05 21:14 ` David Miller
2011-06-10 8:35 ` [PATCH v3] vlan: Fix the ingress VLAN_FLAG_REORDER_HDR check Jiri Pirko
2011-06-10 9:26 ` Changli Gao
2011-06-10 9:34 ` Jiri Pirko
2011-06-10 9:49 ` Changli Gao
2011-06-10 10:35 ` Jiri Pirko
2011-06-10 11:20 ` Changli Gao
2011-06-10 12:12 ` Jiri Pirko
2011-06-10 16:56 ` Jiri Pirko
2011-06-11 0:05 ` Changli Gao
2011-06-11 23:16 ` David Miller
2011-06-08 16:28 ` [PATCH] vlan: Fix the ingress VLAN_FLAG_REORDER_HDR check v2 Jiri Pirko
2011-06-08 23:08 ` Changli Gao
2011-06-09 6:01 ` Jiri Pirko
2011-06-09 11:00 ` [PATCH 1/3] vlan: Do not support clearing VLAN_FLAG_REORDER_HDR Jiri Pirko
2011-05-22 8:38 ` [patch net-next-2.6 v2] net: vlan: make non-hw-accel rx path similar to hw-accel Changli Gao
2011-05-22 9:37 ` Jiri Pirko
2011-05-22 10:17 ` Changli Gao
2011-05-22 10:26 ` Eric W. Biederman
2011-05-22 10:40 ` Changli Gao
2011-05-22 13:16 ` Jiri Pirko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1oc2spmyt.fsf@fess.ebiederm.org \
--to=ebiederm@xmission$(echo .)com \
--cc=andy@greyhouse$(echo .)net \
--cc=davem@davemloft$(echo .)net \
--cc=eric.dumazet@gmail$(echo .)com \
--cc=fubar@us$(echo .)ibm.com \
--cc=greearb@candelatech$(echo .)com \
--cc=jesse@nicira$(echo .)com \
--cc=jpirko@redhat$(echo .)com \
--cc=kaber@trash$(echo .)net \
--cc=netdev@vger$(echo .)kernel.org \
--cc=nicolas.2p.debian@gmail$(echo .)com \
--cc=shemminger@linux-foundation$(echo .)org \
--cc=xiaosuo@gmail$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox