Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932580AbcLGR6M (ORCPT ); Wed, 7 Dec 2016 12:58:12 -0500 Received: from mail-io0-f196.google.com ([209.85.223.196]:36852 "EHLO mail-io0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753211AbcLGR6H (ORCPT ); Wed, 7 Dec 2016 12:58:07 -0500 MIME-Version: 1.0 In-Reply-To: References: <1481008233-16777-1-git-send-email-zhouzhouyi@gmail.com> From: Cong Wang Date: Wed, 7 Dec 2016 09:57:45 -0800 Message-ID: Subject: Re: [PATCH] net: return value of skb_linearize should be handled in Linux kernel To: Zhouyi Zhou Cc: faisal.latif@intel.com, dledford@redhat.com, sean.hefty@intel.com, Hal Rosenstock , Jeff Kirsher , QLogic-Storage-Upstream@qlogic.com, jejb@linux.vnet.ibm.com, "Martin K. Petersen" , Johannes Thumshirn , jon.maloy@ericsson.com, ying.xue@windriver.com, David Miller , linux-rdma@vger.kernel.org, LKML , intel-wired-lan , Linux Kernel Network Developers , linux-scsi@vger.kernel.org, fcoe-devel@open-fcoe.org, tipc-discussion@lists.sourceforge.net Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2405 Lines: 56 On Tue, Dec 6, 2016 at 10:27 PM, Zhouyi Zhou wrote: > On Wed, Dec 7, 2016 at 1:02 PM, Cong Wang wrote: >> On Mon, Dec 5, 2016 at 11:10 PM, Zhouyi Zhou wrote: >>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c >>> index 2a653ec..ab787cb 100644 >>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c >>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c >>> @@ -490,7 +490,11 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, >>> */ >>> if ((fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA) && >>> (fctl & FC_FC_END_SEQ)) { >>> - skb_linearize(skb); >>> + int err = 0; >>> + >>> + err = skb_linearize(skb); >>> + if (err) >>> + return err; >> >> >> You can reuse 'rc' instead of adding 'err'. > rc here is meaningful for the length of data being ddped. If using rc > here, a successful > skb_linearize will assign rc to 0. Right, I thought it returns 0 on success. >> >> >> >>> crc = (struct fcoe_crc_eof *)skb_put(skb, sizeof(*crc)); >>> crc->fcoe_eof = FC_EOF_T; >>> } >>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c >>> index fee1f29..4926d48 100644 >>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c >>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c >>> @@ -2173,8 +2173,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, >>> total_rx_bytes += ddp_bytes; >>> total_rx_packets += DIV_ROUND_UP(ddp_bytes, >>> mss); >>> - } >>> - if (!ddp_bytes) { >>> + } else { >>> dev_kfree_skb_any(skb); >>> continue; >>> } >> >> >> This piece doesn't seem to be related. > if ddp_bytes is negative there will be some error, I think the skb > should not pass to upper layer. You misunderstand my point, this return value is for ixgbe_fcoe_ddp() not skb_linearize(), you need to make it a separate patch because this patch, as in $subject, only fixes skb_linearize().