From nobody Sat May 4 04:03:37 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a17:907:7811:b0:6d8:2910:9a8 with SMTP id la17csp4144816ejc; Mon, 28 Mar 2022 05:49:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyKd2oFUZbcarQfFNGYJfysv9psZn7K858MHPIeAJa6LEbbA0b5GvEMQ3pYVS46pSzpahxc X-Received: by 2002:a67:c912:0:b0:325:456b:4cdd with SMTP id w18-20020a67c912000000b00325456b4cddmr9873412vsk.66.1648471769674; Mon, 28 Mar 2022 05:49:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648471769; cv=none; d=google.com; s=arc-20160816; b=ZpJ7HZzUC+ChEwSsnRucejWIMXdVDLglJi0/UGaQHSrDF5mdpajAG/M4Wk8HKo6s9q 4ybqqrfreGvpmyarqFYKNkgJ14VyeDh9/hcXenVhpOxMSo2YmTEwemh8Hti3Ur20OGLS mBPMvS7eliW8jh87M6CqBA/7nVFSINuzlXpBhSTp/h69JuMiVlt6l+9wC8JYOR//jgbA 3ulkLkNxgck06S1p4cjoOyxv/YOITINLOFRUYiPjlTnRDW3rVxdE8CAPWC8DXLeVlFwR ZQN0Bo4/CAYSNP62Nr8u6A4IqSslbdoJb8aMTbbLhzAgJP9fNkNiuWujoEv+862Swzyp +1dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=FCZZZNlaLCSL7BezYluWRRVwt4bX5jv4Vm++zc9hoWA=; b=bprP84olOayXzT5FlPQt/z5Od0rPBoCfaXHhZtd82aXlw+cs4LFMHS/dfwBHpjYozV K3+5VVf0P2gBm29Ovb9I8jZuwhLUK/1usaSus6JQjNsn+5MWuAXMXCq3AzAkdbvZKGqP E9Vy4IknPDYBM1CGokk9LpgGszOxfmwQIpDfJuGCJP5Wu0Jvd8EHwzWkgOdb26lZ7zPn rAHREKPKPWg5coOpEfEcY1syyNjckEl4XZMrckBxTrVS5JlZA4VBgmjKICxIdCp14sm2 yKbaMHPqtXFaS3L1cL1Zdia2FRE2Qv3t5nCpSBZNVfoW9hftB6jyN/bMU6BZl8LQariR FB3w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4477-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4477-wpasupplicant.patchew=gmail.com@lists.linux.dev" Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id c3-20020a05612214a300b0033ee1caa1fasi1429182vkq.155.2022.03.28.05.49.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Mar 2022 05:49:29 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-4477-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4477-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4477-wpasupplicant.patchew=gmail.com@lists.linux.dev" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sjc.edge.kernel.org (Postfix) with ESMTPS id B7F733E0E65 for ; Mon, 28 Mar 2022 12:49:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D38FB3D95; Mon, 28 Mar 2022 12:49:27 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [193.142.43.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 188BC3202 for ; Mon, 28 Mar 2022 12:49:26 +0000 (UTC) Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.92) (envelope-from ) id 1nYooG-00068r-57; Mon, 28 Mar 2022 14:49:24 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH mptcp-next v2 1/3] mptcp: diag: switch to context structure Date: Mon, 28 Mar 2022 14:49:11 +0200 Message-Id: <20220328124913.29768-2-fw@strlen.de> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220328124913.29768-1-fw@strlen.de> References: <20220328124913.29768-1-fw@strlen.de> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Raw access to cb->arg[] is deprecated, use a context structure. Signed-off-by: Florian Westphal --- net/mptcp/mptcp_diag.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/net/mptcp/mptcp_diag.c b/net/mptcp/mptcp_diag.c index f44125dd6697..c4992eeb67d8 100644 --- a/net/mptcp/mptcp_diag.c +++ b/net/mptcp/mptcp_diag.c @@ -66,20 +66,28 @@ static int mptcp_diag_dump_one(struct netlink_callback = *cb, return err; } =20 +struct mptcp_diag_ctx { + long s_slot; + long s_num; +}; + static void mptcp_diag_dump(struct sk_buff *skb, struct netlink_callback *= cb, const struct inet_diag_req_v2 *r) { bool net_admin =3D netlink_net_capable(cb->skb, CAP_NET_ADMIN); + struct mptcp_diag_ctx *diag_ctx =3D (void *)cb->ctx; struct net *net =3D sock_net(skb->sk); struct inet_diag_dump_data *cb_data; struct mptcp_sock *msk; struct nlattr *bc; =20 + BUILD_BUG_ON(sizeof(cb->ctx) < sizeof(*diag_ctx)); + cb_data =3D cb->data; bc =3D cb_data->inet_diag_nla_bc; =20 - while ((msk =3D mptcp_token_iter_next(net, &cb->args[0], &cb->args[1])) != =3D - NULL) { + while ((msk =3D mptcp_token_iter_next(net, &diag_ctx->s_slot, + &diag_ctx->s_num)) !=3D NULL) { struct inet_sock *inet =3D (struct inet_sock *)msk; struct sock *sk =3D (struct sock *)msk; int ret =3D 0; @@ -101,7 +109,7 @@ static void mptcp_diag_dump(struct sk_buff *skb, struct= netlink_callback *cb, sock_put(sk); if (ret < 0) { /* will retry on the same position */ - cb->args[1]--; + diag_ctx->s_num--; break; } cond_resched(); --=20 2.35.1 From nobody Sat May 4 04:03:37 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a17:907:7811:b0:6d8:2910:9a8 with SMTP id la17csp4144854ejc; Mon, 28 Mar 2022 05:49:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxKfX4Twvikz1DSd/xnqiB1jSt8nysJXXV+rAIcKByD2iqrdoD2e/hLXX6/iQwtKosZHdX5 X-Received: by 2002:a17:907:7204:b0:6db:ebf4:9988 with SMTP id dr4-20020a170907720400b006dbebf49988mr26644688ejc.709.1648471774661; Mon, 28 Mar 2022 05:49:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648471774; cv=none; d=google.com; s=arc-20160816; b=S2yYFb3ghJs2JveJKe7rgvx7Acf4zkXOH1TK/H/aIdh1wIhv0Tpgu0f1L/tWaliXe1 1ZxJaTyT6HVeS+xcwrITxZXKz9S/yqj8MsMvCFJHWQNLTy9/27+9V7EKIisbLga3uiQS 7aVDVRNd8Qe5n7srFCZAVrkzUk6pKzvuAVDCt9SZCYJyDno/RdNtabnTXbH+z8o+pRUc STa6duhsTlHCg/3z0HXNWs2aye1HCBLC8dasrVpgqJie4Bo6/NR4tsIZBrlnDRqpOjp1 5YW7iMC/B2MpecZM36d78HxaoXcDouxuuWc+nuKQtyPeb65d2TmWFsXZiAIKQQm/lNxn felQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=r5NBWNLd5oRaXaqe+tpr8w1+8UvHELWVtmlQkSIHrMg=; b=vMhv0QpLWCBIDgVhxSUpRT5VBxCxje+X5rG1qi8LTPDfKAOdvuZqma3lrCCaqVJ+j/ CDnfFtXrpFe9o79D/eACZk7YHn/Kc5y+hiWI22jbT4dLrbt+aGW4EKCxFPhBfKOL5acW ekZV5yOj8lgsUQE0nCPGo3m+0W1ABv+UB/125Bc3h02V/fP+eneRScEkE/0JbaWdVr5J 3CuMhKJcunUhlyEK/fMg4FLkISQIW/j+AhGutth6r3QLl507h6bprwJaJ8vSN/2FNqdT RmxSIOcMa1UW2DMXDkVgouwOs4xrDuU4OGVPsVZTSLZA0+/Nd2Ob0VHBf44jX6y7Ma57 3OWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4478-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-4478-wpasupplicant.patchew=gmail.com@lists.linux.dev" Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id f3-20020a1709063f4300b006dfa02fa314si13632793ejj.845.2022.03.28.05.49.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Mar 2022 05:49:34 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-4478-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4478-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-4478-wpasupplicant.patchew=gmail.com@lists.linux.dev" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id 5F14C1C09CF for ; Mon, 28 Mar 2022 12:49:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E04D942BA; Mon, 28 Mar 2022 12:49:31 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [193.142.43.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5446E3D95 for ; Mon, 28 Mar 2022 12:49:30 +0000 (UTC) Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.92) (envelope-from ) id 1nYooK-000691-9z; Mon, 28 Mar 2022 14:49:28 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH mptcp-next v2 2/3] mptcp: remove locking in mptcp_diag_fill_info Date: Mon, 28 Mar 2022 14:49:12 +0200 Message-Id: <20220328124913.29768-3-fw@strlen.de> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220328124913.29768-1-fw@strlen.de> References: <20220328124913.29768-1-fw@strlen.de> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Problem is that listener iteration would call this from atomic context so this locking is not allowed. One way is to drop locks before calling the helper, but afaics the lock isn't really needed, all values are fetched via READ_ONCE(). Signed-off-by: Florian Westphal --- net/mptcp/sockopt.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index f949d22f52bd..826b0c1dae98 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -853,15 +853,11 @@ static int mptcp_getsockopt_first_sf_only(struct mptc= p_sock *msk, int level, int =20 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) { - struct sock *sk =3D &msk->sk.icsk_inet.sk; u32 flags =3D 0; - bool slow; u8 val; =20 memset(info, 0, sizeof(*info)); =20 - slow =3D lock_sock_fast(sk); - info->mptcpi_subflows =3D READ_ONCE(msk->pm.subflows); info->mptcpi_add_addr_signal =3D READ_ONCE(msk->pm.add_addr_signaled); info->mptcpi_add_addr_accepted =3D READ_ONCE(msk->pm.add_addr_accepted); @@ -882,8 +878,6 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) info->mptcpi_snd_una =3D READ_ONCE(msk->snd_una); info->mptcpi_rcv_nxt =3D READ_ONCE(msk->ack_seq); info->mptcpi_csum_enabled =3D READ_ONCE(msk->csum_enabled); - - unlock_sock_fast(sk, slow); } EXPORT_SYMBOL_GPL(mptcp_diag_fill_info); =20 --=20 2.35.1 From nobody Sat May 4 04:03:37 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a17:907:7811:b0:6d8:2910:9a8 with SMTP id la17csp4144873ejc; Mon, 28 Mar 2022 05:49:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyGg8uRHjrNrY5D2eilVuCcGdK81XYmEF+B/Hw8/e2lAhDr1up5N+sgWVKOHSDXWb+9leKl X-Received: by 2002:a05:6122:792:b0:343:3995:cdb2 with SMTP id k18-20020a056122079200b003433995cdb2mr2109449vkr.15.1648471777610; Mon, 28 Mar 2022 05:49:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648471777; cv=none; d=google.com; s=arc-20160816; b=QEFHctPw3uC+AeDynxbOBP5WoKEx5NoYVviIFGdtD9pD/0pBU5/P84ZffWa/0Q2Gqg M2Gi8qz8in4qsiC9Ja20jdS6+zbdtpRY6yBjMgSZfYNg3slMsp4GzbSiQn68saGicgVL e96N5Ng+hEoTZ/HxivM323nHzTTBMvN72fu0SpJULbfjr6ybEb4m+/pMa/LM+sYS+9jD 4+GCh5d9Ie3e0B53EgX3j9B/T3kiDhMNe4oP/DQ177gljHumSjGUarpDdwD6gixPeyNF UhEUl0LekLroIcln3o+senMW9UttccXU5RiZRePwTiAyGQQbs6SdeafrGfrAv8glDBJA YUzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=dSsRu3xpA1VHVV4vob/CxlRrVr7xVuthMv6phcKx42A=; b=BYCBoYGVfpk63141jzI+xaDSWAFHRffCm3IbfzbHCykwwicv89rY4fQPKwz10I+cOJ fdOQqbEebFXogko7Qcu+C5+gSmJfKR5CMPoaQXyxr5z+5XBlwNWNYofRHEHVCY/zpc3v MS8E62oaCXZ9Kt5W3px4yu4nMj38bgKYR84kbo0ALvf9tSuENtZiD+DoU96KDOtvpY3t 0Ddlp7A91pEyKMwbGTTfAsgfxxtXr9KV2FKkpG3YlMa6SnHAWBbDnzwCaBkzlkFAEWt3 CvhXySm/75XyDRvk7vIme0L9R5I852TTU+U3gmWytr6diJnkRDKk61DzqsY4XxantibU 6r/g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4479-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4479-wpasupplicant.patchew=gmail.com@lists.linux.dev" Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id o2-20020a67e142000000b0032557098017si1600997vsl.300.2022.03.28.05.49.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Mar 2022 05:49:37 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-4479-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-4479-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4479-wpasupplicant.patchew=gmail.com@lists.linux.dev" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sjc.edge.kernel.org (Postfix) with ESMTPS id AEA703E0EA1 for ; Mon, 28 Mar 2022 12:49:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A1B074358; Mon, 28 Mar 2022 12:49:35 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [193.142.43.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CA0242BA for ; Mon, 28 Mar 2022 12:49:34 +0000 (UTC) Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.92) (envelope-from ) id 1nYooO-00069H-FP; Mon, 28 Mar 2022 14:49:32 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH mptcp-next v2 3/3] mptcp: listen diag dump support Date: Mon, 28 Mar 2022 14:49:13 +0200 Message-Id: <20220328124913.29768-4-fw@strlen.de> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220328124913.29768-1-fw@strlen.de> References: <20220328124913.29768-1-fw@strlen.de> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" makes 'ss -Ml' show mptcp listen sockets. Iterate over the tcp listen sockets and pick those that have mptcp ulp info attached. mptcp_diag_get_info() is modified to prefer msk->first for mptcp sockets in listen state. This reports accurate number for recv and send queue (pending / max connection backlog counters). Sample output: ss -Mil State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 20 127.0.0.1:12000 0.0.0.0:* subflows_max:2 Signed-off-by: Florian Westphal Reported-by: Dan Carpenter Reported-by: kernel test robot --- Changes: - place functionality in helper function - prefer msk->first for msk listeners - more verbose commit message net/mptcp/mptcp_diag.c | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/net/mptcp/mptcp_diag.c b/net/mptcp/mptcp_diag.c index c4992eeb67d8..076dd99d35d9 100644 --- a/net/mptcp/mptcp_diag.c +++ b/net/mptcp/mptcp_diag.c @@ -69,8 +69,80 @@ static int mptcp_diag_dump_one(struct netlink_callback *= cb, struct mptcp_diag_ctx { long s_slot; long s_num; + unsigned int l_slot; + unsigned int l_num; }; =20 +static void mptcp_diag_dump_listeners(struct sk_buff *skb, struct netlink_= callback *cb, + const struct inet_diag_req_v2 *r, + bool net_admin) +{ + struct mptcp_diag_ctx *diag_ctx =3D (void *)cb->ctx; + struct net *net =3D sock_net(skb->sk); + struct nlattr *bc; + int i; + + for (i =3D diag_ctx->l_slot; i < INET_LHTABLE_SIZE; i++) { + struct inet_listen_hashbucket *ilb; + struct hlist_nulls_node *node; + struct sock *sk; + int num =3D 0; + + ilb =3D &tcp_hashinfo.listening_hash[i]; + + rcu_read_lock(); + spin_lock(&ilb->lock); + sk_nulls_for_each(sk, node, &ilb->nulls_head) { + const struct mptcp_subflow_context *ctx =3D mptcp_subflow_ctx(sk); + struct inet_sock *inet =3D inet_sk(sk); + int ret; + + if (num < diag_ctx->l_num) + goto next_listen; + + if (!ctx || strcmp(inet_csk(sk)->icsk_ulp_ops->name, "mptcp")) + goto next_listen; + + sk =3D ctx->conn; + if (!sk || !net_eq(sock_net(sk), net)) + goto next_listen; + + if (r->sdiag_family !=3D AF_UNSPEC && + sk->sk_family !=3D r->sdiag_family) + goto next_listen; + + if (r->id.idiag_sport !=3D inet->inet_sport && + r->id.idiag_sport) + goto next_listen; + + if (!refcount_inc_not_zero(&sk->sk_refcnt)) + goto next_listen; + + ret =3D sk_diag_dump(sk, skb, cb, r, bc, net_admin); + sock_put(sk); + if (ret < 0) { + spin_unlock(&ilb->lock); + rcu_read_unlock(); + diag_ctx->l_slot =3D i; + diag_ctx->l_num =3D num; + return; + } + diag_ctx->l_num =3D num + 1; + num =3D 0; +next_listen: + ++num; + } + spin_unlock(&ilb->lock); + rcu_read_unlock(); + + cond_resched(); + diag_ctx->l_num =3D 0; + } + + diag_ctx->l_num =3D 0; + diag_ctx->l_slot =3D i; +} + static void mptcp_diag_dump(struct sk_buff *skb, struct netlink_callback *= cb, const struct inet_diag_req_v2 *r) { @@ -114,6 +186,9 @@ static void mptcp_diag_dump(struct sk_buff *skb, struct= netlink_callback *cb, } cond_resched(); } + + if ((r->idiag_states & TCPF_LISTEN) && r->id.idiag_dport =3D=3D 0) + mptcp_diag_dump_listeners(skb, cb, r, net_admin); } =20 static void mptcp_diag_get_info(struct sock *sk, struct inet_diag_msg *r, @@ -124,6 +199,19 @@ static void mptcp_diag_get_info(struct sock *sk, struc= t inet_diag_msg *r, =20 r->idiag_rqueue =3D sk_rmem_alloc_get(sk); r->idiag_wqueue =3D sk_wmem_alloc_get(sk); + + if (inet_sk_state_load(sk) =3D=3D TCP_LISTEN) { + struct sock *lsk =3D READ_ONCE(msk->first); + + if (lsk) { + /* override with settings from tcp listener, + * so Send-Q will show accept queue. + */ + r->idiag_rqueue =3D READ_ONCE(lsk->sk_ack_backlog); + r->idiag_wqueue =3D READ_ONCE(lsk->sk_max_ack_backlog); + } + } + if (!info) return; =20 --=20 2.35.1