From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Miller Subject: Re: Gianfar: RX Recycle skb->len error Date: Mon, 22 Mar 2010 20:30:53 -0700 (PDT) Message-ID: <20100322.203053.37576243.davem@davemloft.net> References: <20100321.214642.67901344.davem@davemloft.net> <20100322172446.GA32758@oksana.dev.rtsoft.ru> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: avorontsov@ru.mvista.com, netdev@vger.kernel.org, Sandeep.Kumar@freescale.com To: ben@bigfootnetworks.com Return-path: Received: from 74-93-104-97-Washington.hfc.comcastbusiness.net ([74.93.104.97]:47219 "EHLO sunset.davemloft.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754182Ab0CWDaa (ORCPT ); Mon, 22 Mar 2010 23:30:30 -0400 In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: From: "Ben Menchaca (ben@bigfootnetworks.com)" Date: Mon, 22 Mar 2010 14:10:48 -0700 > It's yucky, but skb_reserve(skb, -alignamount) works, I have no problem with people using that. > It seems in both these cases for gianfar, the amount of the > alignment is not immediately available to the code the > recognizes that the skb_reset_reserved() is required. A bit > larger rework appears to be needed. There's no need to make this so complicated. Just remember the value and then refer to it later, when needed. struct gianfar_skb_cb { int alignamount; }; #define GIANFAR_CB(skb) ((struct gianfar_skb_cb *)((skb)->cb)) ... GIANFAR_CB(skb)->alignamount = alignamount; ... skb_reserve(skb, -GIANFAR_CB(skb)->alignamount);