From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Julian Anastasov <ja@ssi.bg>
Cc: Simon Horman <horms@verge.net.au>,
lvs-devel@vger.kernel.org, netfilter-devel@vger.kernel.org,
Dust Li <dust.li@linux.alibaba.com>,
Jiejian Wu <jiejian@linux.alibaba.com>,
rcu@vger.kernel.org
Subject: Re: [PATCHv6 net-next 10/14] ipvs: show the current conn_tab size to users
Date: Mon, 24 Nov 2025 22:21:53 +0100 [thread overview]
Message-ID: <aSTMcYl8bt6MLJ6o@calendula> (raw)
In-Reply-To: <20251019155711.67609-11-ja@ssi.bg>
On Sun, Oct 19, 2025 at 06:57:07PM +0300, Julian Anastasov wrote:
> As conn_tab is per-net, better to show the current hash table size
> to users instead of the ip_vs_conn_tab_size (max).
>
> Signed-off-by: Julian Anastasov <ja@ssi.bg>
> ---
> net/netfilter/ipvs/ip_vs_ctl.c | 36 +++++++++++++++++++++++++++++-----
> 1 file changed, 31 insertions(+), 5 deletions(-)
>
> diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
> index c7683a9241e5..3dfc01ef1890 100644
> --- a/net/netfilter/ipvs/ip_vs_ctl.c
> +++ b/net/netfilter/ipvs/ip_vs_ctl.c
> @@ -2743,10 +2743,16 @@ static void ip_vs_info_seq_stop(struct seq_file *seq, void *v)
>
> static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
> {
> + struct net *net = seq_file_net(seq);
> + struct netns_ipvs *ipvs = net_ipvs(net);
> +
> if (v == SEQ_START_TOKEN) {
> + struct ip_vs_rht *tc = rcu_dereference(ipvs->conn_tab);
> + int csize = tc ? tc->size : 0;
> +
> seq_printf(seq,
> "IP Virtual Server version %d.%d.%d (size=%d)\n",
> - NVERSION(IP_VS_VERSION_CODE), ip_vs_conn_tab_size);
> + NVERSION(IP_VS_VERSION_CODE), csize);
> seq_puts(seq,
> "Prot LocalAddress:Port Scheduler Flags\n");
> seq_puts(seq,
> @@ -3424,10 +3430,17 @@ do_ip_vs_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
> switch (cmd) {
> case IP_VS_SO_GET_VERSION:
> {
> + struct ip_vs_rht *t;
> + int csize = 0;
> char buf[64];
>
> + rcu_read_lock();
> + t = rcu_dereference(ipvs->conn_tab);
> + if (t)
> + csize = t->size;
> + rcu_read_unlock();
here too, maybe add helper function?
> sprintf(buf, "IP Virtual Server version %d.%d.%d (size=%d)",
> - NVERSION(IP_VS_VERSION_CODE), ip_vs_conn_tab_size);
> + NVERSION(IP_VS_VERSION_CODE), csize);
> if (copy_to_user(user, buf, strlen(buf)+1) != 0) {
> ret = -EFAULT;
> goto out;
> @@ -3439,8 +3452,16 @@ do_ip_vs_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
> case IP_VS_SO_GET_INFO:
> {
> struct ip_vs_getinfo info;
> + struct ip_vs_rht *t;
> + int csize = 0;
> +
> + rcu_read_lock();
> + t = rcu_dereference(ipvs->conn_tab);
> + if (t)
> + csize = t->size;
> + rcu_read_unlock();
... that can be used here?
> info.version = IP_VS_VERSION_CODE;
> - info.size = ip_vs_conn_tab_size;
> + info.size = csize;
> info.num_services =
> atomic_read(&ipvs->num_services[IP_VS_AF_INET]);
> if (copy_to_user(user, &info, sizeof(info)) != 0)
> @@ -4379,6 +4400,8 @@ static int ip_vs_genl_get_cmd(struct sk_buff *skb, struct genl_info *info)
> int ret, cmd, reply_cmd;
> struct net *net = sock_net(skb->sk);
> struct netns_ipvs *ipvs = net_ipvs(net);
> + struct ip_vs_rht *t;
> + int csize;
>
> cmd = info->genlhdr->cmd;
>
> @@ -4446,10 +4469,13 @@ static int ip_vs_genl_get_cmd(struct sk_buff *skb, struct genl_info *info)
> }
>
> case IPVS_CMD_GET_INFO:
> + csize = 0;
> + t = rcu_dereference(ipvs->conn_tab);
> + if (t)
> + csize = t->size;
... I found another candidate to use the helper here :)
If you add the helper function first, then I think this patch will be
super-small when switching to per-netns, because only the helper
function to get the size will need to be adjusted.
> if (nla_put_u32(msg, IPVS_INFO_ATTR_VERSION,
> IP_VS_VERSION_CODE) ||
> - nla_put_u32(msg, IPVS_INFO_ATTR_CONN_TAB_SIZE,
> - ip_vs_conn_tab_size))
> + nla_put_u32(msg, IPVS_INFO_ATTR_CONN_TAB_SIZE, csize))
> goto nla_put_failure;
> break;
> }
> --
> 2.51.0
>
>
>
next prev parent reply other threads:[~2025-11-24 21:21 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-19 15:56 [PATCHv6 net-next 00/14] ipvs: per-net tables and optimizations Julian Anastasov
2025-10-19 15:56 ` [PATCHv6 net-next 01/14] rculist_bl: add hlist_bl_for_each_entry_continue_rcu Julian Anastasov
2025-10-23 11:44 ` Florian Westphal
2025-10-23 13:33 ` Julian Anastasov
2025-10-19 15:56 ` [PATCHv6 net-next 02/14] ipvs: make ip_vs_svc_table and ip_vs_svc_fwm_table per netns Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 03/14] ipvs: some service readers can use RCU Julian Anastasov
2025-10-24 2:21 ` Dust Li
2025-11-24 21:00 ` Pablo Neira Ayuso
2025-10-19 15:57 ` [PATCHv6 net-next 04/14] ipvs: use single svc table Julian Anastasov
2025-11-24 21:07 ` Pablo Neira Ayuso
2025-10-19 15:57 ` [PATCHv6 net-next 05/14] ipvs: do not keep dest_dst after dest is removed Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 06/14] ipvs: use more counters to avoid service lookups Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 07/14] ipvs: add resizable hash tables Julian Anastasov
2025-11-24 21:16 ` Pablo Neira Ayuso
2025-10-19 15:57 ` [PATCHv6 net-next 08/14] ipvs: use resizable hash table for services Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 09/14] ipvs: switch to per-net connection table Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 10/14] ipvs: show the current conn_tab size to users Julian Anastasov
2025-11-24 21:21 ` Pablo Neira Ayuso [this message]
2025-10-19 15:57 ` [PATCHv6 net-next 11/14] ipvs: no_cport and dropentry counters can be per-net Julian Anastasov
2025-11-24 21:29 ` Pablo Neira Ayuso
2025-10-19 15:57 ` [PATCHv6 net-next 12/14] ipvs: use more keys for connection hashing Julian Anastasov
2025-10-19 15:57 ` [PATCHv6 net-next 13/14] ipvs: add ip_vs_status info Julian Anastasov
2025-11-24 21:42 ` Pablo Neira Ayuso
2025-10-19 15:57 ` [PATCHv6 net-next 14/14] ipvs: add conn_lfactor and svc_lfactor sysctl vars Julian Anastasov
2025-11-24 21:46 ` [PATCHv6 net-next 00/14] ipvs: per-net tables and optimizations Pablo Neira Ayuso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aSTMcYl8bt6MLJ6o@calendula \
--to=pablo@netfilter.org \
--cc=dust.li@linux.alibaba.com \
--cc=horms@verge.net.au \
--cc=ja@ssi.bg \
--cc=jiejian@linux.alibaba.com \
--cc=lvs-devel@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=rcu@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).