net-sysctl: factor out cpumask parsing helper
Will be used by the following patch to avoid code duplication. No functional changes intended. The only difference is that now flow_limit_cpu_sysctl() will always compute the flow limit mask on each read operation, even when read() will not return any byte to user-space. Note that the new helper is placed under a new #ifdef at the file start to better fit the usage in the later patch Signed-off-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Simon Horman <simon.horman@corigine.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
8697a258ae
commit
135746c61f
@ -45,6 +45,33 @@ EXPORT_SYMBOL(sysctl_fb_tunnels_only_for_init_net);
|
||||
int sysctl_devconf_inherit_init_net __read_mostly;
|
||||
EXPORT_SYMBOL(sysctl_devconf_inherit_init_net);
|
||||
|
||||
#if IS_ENABLED(CONFIG_NET_FLOW_LIMIT)
|
||||
static void dump_cpumask(void *buffer, size_t *lenp, loff_t *ppos,
|
||||
struct cpumask *mask)
|
||||
{
|
||||
char kbuf[128];
|
||||
int len;
|
||||
|
||||
if (*ppos || !*lenp) {
|
||||
*lenp = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
len = min(sizeof(kbuf) - 1, *lenp);
|
||||
len = scnprintf(kbuf, len, "%*pb", cpumask_pr_args(mask));
|
||||
if (!len) {
|
||||
*lenp = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (len < *lenp)
|
||||
kbuf[len++] = '\n';
|
||||
memcpy(buffer, kbuf, len);
|
||||
*lenp = len;
|
||||
*ppos += len;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
@ -155,13 +182,6 @@ static int flow_limit_cpu_sysctl(struct ctl_table *table, int write,
|
||||
write_unlock:
|
||||
mutex_unlock(&flow_limit_update_mutex);
|
||||
} else {
|
||||
char kbuf[128];
|
||||
|
||||
if (*ppos || !*lenp) {
|
||||
*lenp = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
cpumask_clear(mask);
|
||||
rcu_read_lock();
|
||||
for_each_possible_cpu(i) {
|
||||
@ -171,17 +191,7 @@ write_unlock:
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
len = min(sizeof(kbuf) - 1, *lenp);
|
||||
len = scnprintf(kbuf, len, "%*pb", cpumask_pr_args(mask));
|
||||
if (!len) {
|
||||
*lenp = 0;
|
||||
goto done;
|
||||
}
|
||||
if (len < *lenp)
|
||||
kbuf[len++] = '\n';
|
||||
memcpy(buffer, kbuf, len);
|
||||
*lenp = len;
|
||||
*ppos += len;
|
||||
dump_cpumask(buffer, lenp, ppos, mask);
|
||||
}
|
||||
|
||||
done:
|
||||
|
Loading…
Reference in New Issue
Block a user