From patchwork Tue Oct 26 21:59:33 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 69295 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3AC91B6F10 for ; Wed, 27 Oct 2010 09:01:46 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758367Ab0JZWBm (ORCPT ); Tue, 26 Oct 2010 18:01:42 -0400 Received: from mga09.intel.com ([134.134.136.24]:53806 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757809Ab0JZWBl (ORCPT ); Tue, 26 Oct 2010 18:01:41 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 26 Oct 2010 15:01:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.58,242,1286175600"; d="scan'208";a="671157432" Received: from unknown (HELO [127.0.0.1]) ([10.23.209.48]) by orsmga001.jf.intel.com with ESMTP; 26 Oct 2010 15:01:41 -0700 From: John Fastabend Subject: [RFC][net-next-2.6 PATCH v2] 8021q: set hard_header_len when VLAN offload features are toggled To: jesse@nicira.com Cc: john.r.fastabend@intel.com, netdev@vger.kernel.org, bhutchings@solarflare.com Date: Tue, 26 Oct 2010 14:59:33 -0700 Message-ID: <20101026215933.2339.45454.stgit@jf-dev1-dcblab> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Toggling the vlan tx|rx hw offloads needs to set the hard_header_len as well otherwise we end up using LL_RESERVED_SPACE incorrectly. This results in pskb_expand_head() being used unnecessarily. This add a check in vlan_transfer_features to catch the ETH_FLAG_TXVLAN flag and set the header length. This requires drivers to add the ETH_FLAG_TXVLAN to vlan_features. Signed-off-by: John Fastabend --- net/8021q/vlan.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 05b867e..825011b 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -334,6 +334,16 @@ static void vlan_transfer_features(struct net_device *dev, vlandev->features &= ~dev->vlan_features; vlandev->features |= dev->features & dev->vlan_features; vlandev->gso_max_size = dev->gso_max_size; + + /* is ETH_FLAGS_TXVLAN being toggled */ + if ((vlandev->features & ETH_FLAG_TXVLAN) ^ + (old_features & ETH_FLAG_TXVLAN)) { + if (vlandev->features & ETH_FLAG_TXVLAN) + vlandev->hard_header_len -= VLAN_HLEN; + else + vlandev->hard_header_len += VLAN_HLEN; + } + #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) vlandev->fcoe_ddp_xid = dev->fcoe_ddp_xid; #endif