From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752026AbdCaEHy (ORCPT ); Fri, 31 Mar 2017 00:07:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14233 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750763AbdCaEHx (ORCPT ); Fri, 31 Mar 2017 00:07:53 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DBDCE81233 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jasowang@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com DBDCE81233 Subject: Re: [PATCH V2 net-next 6/7] tap: support receiving skb from msg_control To: "Michael S. Tsirkin" References: <1490858550-7763-1-git-send-email-jasowang@redhat.com> <1490858550-7763-7-git-send-email-jasowang@redhat.com> <20170330180140-mutt-send-email-mst@kernel.org> Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org From: Jason Wang Message-ID: Date: Fri, 31 Mar 2017 12:07:44 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170330180140-mutt-send-email-mst@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 31 Mar 2017 04:07:52 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017年03月30日 23:03, Michael S. Tsirkin wrote: > On Thu, Mar 30, 2017 at 03:22:29PM +0800, Jason Wang wrote: >> This patch makes tap_recvmsg() can receive from skb from its caller >> through msg_control. Vhost_net will be the first user. >> >> Signed-off-by: Jason Wang >> --- >> drivers/net/tap.c | 12 ++++++++---- >> 1 file changed, 8 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/net/tap.c b/drivers/net/tap.c >> index abdaf86..07d9174 100644 >> --- a/drivers/net/tap.c >> +++ b/drivers/net/tap.c >> @@ -824,15 +824,17 @@ static ssize_t tap_put_user(struct tap_queue *q, >> >> static ssize_t tap_do_read(struct tap_queue *q, >> struct iov_iter *to, >> - int noblock) >> + int noblock, struct sk_buff *skb) >> { >> DEFINE_WAIT(wait); >> - struct sk_buff *skb; >> ssize_t ret = 0; >> >> if (!iov_iter_count(to)) >> return 0; >> >> + if (skb) >> + goto done; >> + >> while (1) { >> if (!noblock) >> prepare_to_wait(sk_sleep(&q->sk), &wait, >> @@ -856,6 +858,7 @@ static ssize_t tap_do_read(struct tap_queue *q, >> if (!noblock) >> finish_wait(sk_sleep(&q->sk), &wait); >> >> +done: > Please just use an if {} block here. goto on error is ok, > but we are far from done here and goto done is misleading. > > Ok. Thanks.