From patchwork Wed Jan 14 21:56:39 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herbert Xu X-Patchwork-Id: 18538 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 3EC87DE12D for ; Thu, 15 Jan 2009 08:56:49 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759028AbZANV4o (ORCPT ); Wed, 14 Jan 2009 16:56:44 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758905AbZANV4o (ORCPT ); Wed, 14 Jan 2009 16:56:44 -0500 Received: from rhun.apana.org.au ([64.62.148.172]:57454 "EHLO arnor.apana.org.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758293AbZANV4n (ORCPT ); Wed, 14 Jan 2009 16:56:43 -0500 Received: from gondolin.me.apana.org.au ([192.168.0.6]) by arnor.apana.org.au with esmtp (Exim 4.63 #1 (Debian)) id 1LNDj7-0004oo-61; Thu, 15 Jan 2009 08:56:41 +1100 Received: from herbert by gondolin.me.apana.org.au with local (Exim 4.69) (envelope-from ) id 1LNDj5-0006We-Qz; Thu, 15 Jan 2009 08:56:39 +1100 Date: Thu, 15 Jan 2009 08:56:39 +1100 From: Herbert Xu To: "David S. Miller" , netdev@vger.kernel.org Subject: gro: Check for GSO packets and packets with frag_list Message-ID: <20090114215639.GA25069@gondor.apana.org.au> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi Dave: Here's a patch for GRO allowing it to be used on more drivers. gro: Check for GSO packets and packets with frag_list As GRO cannot be applied to packets with frag_list we need to make sure that we reject such packets if they are fed to us, e.g., through a tunnel device. Also there is no point in applying GRO on GSO packets so they too should be rejected. This allows GRO to be used in virtio-net which may produce GSO packets directly but may still benefit from GRO if the other end of it doesn't support GSO. Signed-off-by: Herbert Xu Thanks, diff --git a/net/core/dev.c b/net/core/dev.c index 5f736f1..972a47d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2382,6 +2382,9 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) if (!(skb->dev->features & NETIF_F_GRO)) goto normal; + if (skb_is_gso(skb) || skb_shinfo(skb)->frag_list) + goto normal; + rcu_read_lock(); list_for_each_entry_rcu(ptype, head, list) { struct sk_buff *p;