Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp131227pxb; Thu, 14 Jan 2021 21:55:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJxTZF/TmEqXy1f6dql6yc0k4G4Q6vTPSFplJ0av1WL3JxA2FGqHNrY1LR3M6KUhhmrQyxgW X-Received: by 2002:a17:906:5495:: with SMTP id r21mr7715736ejo.59.1610690120058; Thu, 14 Jan 2021 21:55:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610690120; cv=none; d=google.com; s=arc-20160816; b=Bos/8Uo4j/2YhQFB84PeknpwcyUIwyVyg8cqK356w6a6e8HMmAv7jMJfAn2VHPtXqO KAtlwocKPbIVLHBoLrqPrOkogaf6EMxWKyZV4vmaqYXPlBDULXJQlFeBDI/aFcikj9Bl Wa43auzwJ33Ai3AU1XYoaQAMNonSSlSc6BpmkEJiITLrYCJz+0SPrjnqcukV45APTs31 Ff2aESnx5ukZ4AnAL05bSUI+byI2nL5yiGxdtmvpiXf9qO2BS36D+GUE7AVhK+Y6gn0m 4rN6tALCCfw37ni/FeMrBfG01OytIeO9SYMWvDmrRZnA3z5Xr692K3jCQq9CUi+llLqi xymg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4bfGyjv63LiF8F91BaWRSmB0D65pfAEqkn1LSpcEoU4=; b=SlXebx1xv7qLhoTyFjE6S0+sresR2wTgwuVLrGimDuX/mmnW6gowIKmX2ATU3kRWc9 GgCzqwortFhXStledQ1Y1UaoWKYUNYnPMJebbZR2+OvxPjcLQQAZ+zNY9uHpnaUlf5AO DFwRxZIfX9j5iW6Ca75eQ9lhpCeCq5zqWSLisPfyGBGsrjIeumZgAzlPV0SVTuvMS7kQ Uu6Q8wS0XfIPuEaK0O2YIgaTOK42k/7AGp39SxFq6n3a7ZD/WXAynNBw8U7P1y6CEokr 6iowJgDpF6HqyPmTAHmBIsfGp0baln6vLkpHDTd4MRAcvlsq3pG8OCFYoUZZScLrhEo8 Rfqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kaspersky.com header.s=mail header.b=PibPcZ7W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=kaspersky.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cn16si3219151edb.73.2021.01.14.21.54.57; Thu, 14 Jan 2021 21:55:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kaspersky.com header.s=mail header.b=PibPcZ7W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=kaspersky.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733138AbhAOFl2 (ORCPT + 99 others); Fri, 15 Jan 2021 00:41:28 -0500 Received: from mx13.kaspersky-labs.com ([91.103.66.164]:46069 "EHLO mx13.kaspersky-labs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732057AbhAOFl0 (ORCPT ); Fri, 15 Jan 2021 00:41:26 -0500 Received: from relay13.kaspersky-labs.com (unknown [127.0.0.10]) by relay13.kaspersky-labs.com (Postfix) with ESMTP id A181D52126E; Fri, 15 Jan 2021 08:40:42 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kaspersky.com; s=mail; t=1610689242; bh=4bfGyjv63LiF8F91BaWRSmB0D65pfAEqkn1LSpcEoU4=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; b=PibPcZ7WSs9S7jZeaaOsLystdDUMvldTTF4cWESfJB/JHBa5Xy3xw5EOEvDL+0Qk+ XEHfbUlAfS5+W7A69/NON+k4WRB1bX2RDurOjruW7MLh1cU8qK6QJ9sEj3Tmw7jYn4 KbJZevBcYZcJryGWT8GFFTNSxR6SrF3yQbinf6YU= Received: from mail-hq2.kaspersky.com (unknown [91.103.66.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client CN "mail-hq2.kaspersky.com", Issuer "Kaspersky MailRelays CA G3" (verified OK)) by mailhub13.kaspersky-labs.com (Postfix) with ESMTPS id 2E35B52122C; Fri, 15 Jan 2021 08:40:42 +0300 (MSK) Received: from arseniy-pc.avp.ru (10.64.68.129) by hqmailmbx3.avp.ru (10.64.67.243) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2044.4; Fri, 15 Jan 2021 08:40:41 +0300 From: Arseny Krasnov To: Stefan Hajnoczi , Stefano Garzarella , "Michael S. Tsirkin" , Jason Wang , "David S. Miller" , Jakub Kicinski , Arseny Krasnov , Colin Ian King , Andra Paraschiv , Jeff Vander Stoep CC: , , , , , Subject: [RFC PATCH v2 01/13] af_vsock: implement 'vsock_wait_data()'. Date: Fri, 15 Jan 2021 08:40:25 +0300 Message-ID: <20210115054028.1455574-1-arseny.krasnov@kaspersky.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210115053553.1454517-1-arseny.krasnov@kaspersky.com> References: <20210115053553.1454517-1-arseny.krasnov@kaspersky.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.64.68.129] X-ClientProxiedBy: hqmailmbx1.avp.ru (10.64.67.241) To hqmailmbx3.avp.ru (10.64.67.243) X-KSE-ServerInfo: hqmailmbx3.avp.ru, 9 X-KSE-AntiSpam-Interceptor-Info: scan successful X-KSE-AntiSpam-Version: 5.9.16, Database issued on: 01/15/2021 05:18:27 X-KSE-AntiSpam-Status: KAS_STATUS_NOT_DETECTED X-KSE-AntiSpam-Method: none X-KSE-AntiSpam-Rate: 10 X-KSE-AntiSpam-Info: Lua profiles 161159 [Jan 15 2021] X-KSE-AntiSpam-Info: LuaCore: 420 420 0b339e70b2b1bb108f53ec9b40aa316bba18ceea X-KSE-AntiSpam-Info: Version: 5.9.16.0 X-KSE-AntiSpam-Info: Envelope from: arseny.krasnov@kaspersky.com X-KSE-AntiSpam-Info: {Prob_from_in_msgid} X-KSE-AntiSpam-Info: {Tracking_date, moscow} X-KSE-AntiSpam-Info: {Tracking_from_domain_doesnt_match_to} X-KSE-AntiSpam-Info: arseniy-pc.avp.ru:7.1.1;kaspersky.com:7.1.1;127.0.0.199:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1 X-KSE-AntiSpam-Info: Rate: 10 X-KSE-AntiSpam-Info: Status: not_detected X-KSE-AntiSpam-Info: Method: none X-KSE-Antiphishing-Info: Clean X-KSE-Antiphishing-ScanningType: Deterministic X-KSE-Antiphishing-Method: None X-KSE-Antiphishing-Bases: 01/15/2021 05:21:00 X-KSE-AttachmentFiltering-Interceptor-Info: no applicable attachment filtering rules found X-KSE-Antivirus-Interceptor-Info: scan successful X-KSE-Antivirus-Info: Clean, bases: 15.01.2021 2:12:00 X-KSE-BulkMessagesFiltering-Scan-Result: InTheLimit X-KSE-AttachmentFiltering-Interceptor-Info: no applicable attachment filtering rules found X-KSE-BulkMessagesFiltering-Scan-Result: InTheLimit X-KLMS-Rule-ID: 52 X-KLMS-Message-Action: clean X-KLMS-AntiSpam-Status: not scanned, disabled by settings X-KLMS-AntiSpam-Interceptor-Info: not scanned X-KLMS-AntiPhishing: Clean, bases: 2021/01/15 05:03:00 X-KLMS-AntiVirus: Kaspersky Security for Linux Mail Server, version 8.0.3.30, bases: 2021/01/15 02:12:00 #16041563 X-KLMS-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This adds 'vsock_wait_data()' function which is called from user's read syscall and waits until new socket data is arrived. It was based on code from stream dequeue logic and moved to separate function because it will be called both from SOCK_STREAM and SOCK_SEQPACKET receive loops. Signed-off-by: Arseny Krasnov --- net/vmw_vsock/af_vsock.c | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index b12d3a322242..af716f5a93a4 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1822,6 +1822,53 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg, return err; } +static int vsock_wait_data(struct sock *sk, struct wait_queue_entry *wait, + long timeout, + struct vsock_transport_recv_notify_data *recv_data, + size_t target) +{ + int err = 0; + struct vsock_sock *vsk; + const struct vsock_transport *transport; + + vsk = vsock_sk(sk); + transport = vsk->transport; + + if (sk->sk_err != 0 || + (sk->sk_shutdown & RCV_SHUTDOWN) || + (vsk->peer_shutdown & SEND_SHUTDOWN)) { + finish_wait(sk_sleep(sk), wait); + return -1; + } + /* Don't wait for non-blocking sockets. */ + if (timeout == 0) { + err = -EAGAIN; + finish_wait(sk_sleep(sk), wait); + return err; + } + + if (recv_data) { + err = transport->notify_recv_pre_block(vsk, target, recv_data); + if (err < 0) { + finish_wait(sk_sleep(sk), wait); + return err; + } + } + + release_sock(sk); + timeout = schedule_timeout(timeout); + lock_sock(sk); + + if (signal_pending(current)) { + err = sock_intr_errno(timeout); + finish_wait(sk_sleep(sk), wait); + } else if (timeout == 0) { + err = -EAGAIN; + finish_wait(sk_sleep(sk), wait); + } + + return err; +} static int vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, -- 2.25.1