Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1173499pxj; Sat, 8 May 2021 09:39:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx74n2NdZvn9lLGHUfmGuQjKu1OSnNr/hk+o/zyTkvx4jK+SScCaMdsK/JMbfyhahSJrOVd X-Received: by 2002:a17:906:600b:: with SMTP id o11mr16424838ejj.345.1620491977861; Sat, 08 May 2021 09:39:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620491977; cv=none; d=google.com; s=arc-20160816; b=b5CT2JRi5GDvoZH+mDLF6NKZncHQxBEAPoSf+J8tVuQb+SINfZfhKIUjXcRgp1XMXg 9VAhCFx2lKos75lSvSvRctkKfncXtldu9aqXSAEbvjAzPopHkY5VAqspTKYIh0UdVSSQ IUDozb+lJhP/OtigcbuVNYo646TM3MpenRM+rDhCtDDeCgfplc8lX+JuElsPaKbqnVsd U3VCsZBwJM2el6JetFOZt3QBP7T95/9fkfu+qolescoiB+eEMHhQiOBrCSCYx/rK37Gg wkVrFPF8XdZrWdMPXtkwY9EA7VX1skrSX6PPjeHEY5M2+8H+xDKf32NThW+jpZ5s8EYf lmkQ== 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=MGkuxaLyQrGDyQGBNRLu1LM9cj5Iy4AYtoLRZpphOqc=; b=GU/qXxRG7J7GXDp2VD2+Uz/SfFHaezfsTNXNySADuEZHqwK63Iz5kH8phC7HRvcgtq aP8LJn/bLDL6nRFs07FoKLL9anQ+wf7mxdzk4zSWT1jOoym5QKCJ37An4wv08Wbzz0wq BuvQobY2HLLevC4ceE155ZNEAQr/L/HSpmJxynVZ6WgLuGoLQLigeta/r/MZCwSwHlee ZhwZMqMlO42j2mOUXpUCJ4/Idqe3jSyrqGN4MFpt/2bITMjVc+HEmBrcydSZKZ6itT6X wRX/FanTJANt/0vegUMxL5EC6WxVQu7oipXiQj/S4v7AshgU50OBm78/DFOjq0zejZz2 U4Fw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kaspersky.com header.s=mail202102 header.b=ziLtJsV+; 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 ja6si8518707ejc.10.2021.05.08.09.39.14; Sat, 08 May 2021 09:39:37 -0700 (PDT) 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=mail202102 header.b=ziLtJsV+; 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 S230150AbhEHQjD (ORCPT + 99 others); Sat, 8 May 2021 12:39:03 -0400 Received: from mx12.kaspersky-labs.com ([91.103.66.155]:45754 "EHLO mx12.kaspersky-labs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229647AbhEHQiw (ORCPT ); Sat, 8 May 2021 12:38:52 -0400 Received: from relay12.kaspersky-labs.com (unknown [127.0.0.10]) by relay12.kaspersky-labs.com (Postfix) with ESMTP id BBB7276F37; Sat, 8 May 2021 19:37:43 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kaspersky.com; s=mail202102; t=1620491863; bh=MGkuxaLyQrGDyQGBNRLu1LM9cj5Iy4AYtoLRZpphOqc=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; b=ziLtJsV+rdnu1oBZAVxAxWi0z3sxigPegwgXnK6znoHWbXB4DVmwBztqIqsJbOZ1W Qg5we0HfUpXUQj9lS4xd4xaiD9FTT9Au8HxO7LCwLYCdYqIDHmiJ9/kIvJFulSh8rj rXcqHcKE56ClnCg6M+WC5YgPAgoRtXlP4ruWXTsHLfe/wfPIfeLmEUC200WjinyQAp Zfn8va6BPT9rXne3hSg81nCFKe6It08gfEfj/6rRdYReuuhqBj3uCuB102ioWJ3B93 4Hx677+6RgjtEt9LWAPqIWIIptCj7GihDi3kHEfCH8Id49C7zrdoAmNp1yJUxiHnFN luR6yUQYTI+/w== 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 mailhub12.kaspersky-labs.com (Postfix) with ESMTPS id 7799276F2F; Sat, 8 May 2021 19:37:43 +0300 (MSK) Received: from arseniy-pc.avp.ru (10.64.68.128) 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.2176.2; Sat, 8 May 2021 19:37:43 +0300 From: Arseny Krasnov To: Stefan Hajnoczi , Stefano Garzarella , "Michael S. Tsirkin" , Jason Wang , "David S. Miller" , Jakub Kicinski , Arseny Krasnov , Jorgen Hansen , Norbert Slusarek , Andra Paraschiv , Colin Ian King CC: , , , , , Subject: [RFC PATCH v9 19/19] af_vsock: serialize writes to shared socket Date: Sat, 8 May 2021 19:37:35 +0300 Message-ID: <20210508163738.3432975-1-arseny.krasnov@kaspersky.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210508163027.3430238-1-arseny.krasnov@kaspersky.com> References: <20210508163027.3430238-1-arseny.krasnov@kaspersky.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.64.68.128] X-ClientProxiedBy: hqmailmbx2.avp.ru (10.64.67.242) 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.20, Database issued on: 05/08/2021 16:27:11 X-KSE-AntiSpam-Status: KAS_STATUS_NOT_DETECTED X-KSE-AntiSpam-Method: none X-KSE-AntiSpam-Rate: 10 X-KSE-AntiSpam-Info: Lua profiles 163552 [May 08 2021] X-KSE-AntiSpam-Info: Version: 5.9.20.0 X-KSE-AntiSpam-Info: Envelope from: arseny.krasnov@kaspersky.com X-KSE-AntiSpam-Info: LuaCore: 445 445 d5f7ae5578b0f01c45f955a2a751ac25953290c9 X-KSE-AntiSpam-Info: {Prob_from_in_msgid} X-KSE-AntiSpam-Info: {Tracking_from_domain_doesnt_match_to} X-KSE-AntiSpam-Info: 127.0.0.199:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;arseniy-pc.avp.ru:7.1.1;kaspersky.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: 05/08/2021 16:29: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: 08.05.2021 12:32: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/05/08 15:50:00 X-KLMS-AntiVirus: Kaspersky Security for Linux Mail Server, version 8.0.3.30, bases: 2021/05/08 12:32:00 #16600610 X-KLMS-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This add logic, that serializes write access to single socket by multiple threads. It is implemented be adding field with TID of current writer. When writer tries to send something, it checks that field is -1(free), else it sleep in the same way as waiting for free space at peers' side. Signed-off-by: Arseny Krasnov --- include/net/af_vsock.h | 1 + net/vmw_vsock/af_vsock.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h index 1747c0b564ef..413343f18e99 100644 --- a/include/net/af_vsock.h +++ b/include/net/af_vsock.h @@ -69,6 +69,7 @@ struct vsock_sock { u64 buffer_size; u64 buffer_min_size; u64 buffer_max_size; + pid_t tid_owner; /* Private to transport. */ void *trans; diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 7790728465f4..1fb4a1860f6d 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -757,6 +757,7 @@ static struct sock *__vsock_create(struct net *net, vsk->peer_shutdown = 0; INIT_DELAYED_WORK(&vsk->connect_work, vsock_connect_timeout); INIT_DELAYED_WORK(&vsk->pending_work, vsock_pending_work); + vsk->tid_owner = -1; psk = parent ? vsock_sk(parent) : NULL; if (parent) { @@ -1765,7 +1766,9 @@ static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg, ssize_t written; add_wait_queue(sk_sleep(sk), &wait); - while (vsock_stream_has_space(vsk) == 0 && + while ((vsock_stream_has_space(vsk) == 0 || + (vsk->tid_owner != current->pid && + vsk->tid_owner != -1)) && sk->sk_err == 0 && !(sk->sk_shutdown & SEND_SHUTDOWN) && !(vsk->peer_shutdown & RCV_SHUTDOWN)) { @@ -1796,6 +1799,8 @@ static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg, goto out_err; } } + + vsk->tid_owner = current->pid; remove_wait_queue(sk_sleep(sk), &wait); /* These checks occur both as part of and after the loop @@ -1852,7 +1857,10 @@ static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg, err = total_written; } out: + vsk->tid_owner = -1; release_sock(sk); + sk->sk_write_space(sk); + return err; } -- 2.25.1