[Devel] [PATCH VZ10 v2 1/2] ve/sunrpc: Refactor {rpc, write}_kill_tasks
Vladimir Riabchun
vladimir.riabchun at virtuozzo.com
Wed Jun 3 13:15:49 MSK 2026
Move sn->kill_tasks check to rpc_kill_tasks, so that
file write function is only responsible for parsing and calling,
not for logic checks.
This will allow later usage of rpc_kill_tasks without
kill_tasks check duplication.
https://virtuozzo.atlassian.net/browse/VSTOR-126316
Feature: improve kill-tasks
Signed-off-by: Vladimir Riabchun <vladimir.riabchun at virtuozzo.com>
---
v1 -> v2:
- Align log arguments in rpc_kill_tasks
net/sunrpc/clnt.c | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 266cf0fbbad5..cf77eec661c1 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -3411,10 +3411,21 @@ static void rpc_kill_tasks(struct net *net)
struct rpc_clnt *clnt;
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
+ if (sn->kill_tasks)
+ return;
+ sn->kill_tasks = true;
+
spin_lock(&sn->rpc_client_lock);
list_for_each_entry(clnt, &sn->all_clients, cl_clients)
rpc_killall_tasks(clnt);
spin_unlock(&sn->rpc_client_lock);
+
+ pr_info_ratelimited("kill-tasks: by task (%s:%d) in net:[%u]%s\n",
+ current->comm, current->pid, net->ns.inum,
+#ifdef CONFIG_VE
+ net->owner_ve == &ve0 ? "(host)" :
+#endif
+ "");
}
static ssize_t write_kill_tasks(struct file *file, const char __user *buf,
@@ -3422,7 +3433,6 @@ static ssize_t write_kill_tasks(struct file *file, const char __user *buf,
{
struct net *net = pde_data(file->f_path.dentry->d_inode);
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
- bool prev_kill_tasks = sn->kill_tasks;
char tbuf[20];
unsigned long kill_tasks;
int res;
@@ -3437,19 +3447,11 @@ static ssize_t write_kill_tasks(struct file *file, const char __user *buf,
if (res)
return res;
- sn->kill_tasks = !!kill_tasks;
-
- /* Kill pending tasks */
- if (sn->kill_tasks && !prev_kill_tasks) {
+ /* Kill pending tasks or forget about previous murder */
+ if (kill_tasks)
rpc_kill_tasks(net);
- pr_info_ratelimited(
- "kill-tasks: by task (%s:%d) in net:[%u]%s\n",
- current->comm, current->pid, net->ns.inum,
-#ifdef CONFIG_VE
- net->owner_ve == &ve0 ? "(host)" :
-#endif
- "");
- }
+ else
+ sn->kill_tasks = false;
return count;
}
--
2.47.1
More information about the Devel
mailing list