On 5/29/26 11:51 AM, Vladimir Riabchun wrote:
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 <[email protected]>
---
  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..10ef5d9c2696 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,
checkpatch.pl complains for alignment issues
CHECK: Alignment should match open parenthesis
#39: FILE: net/sunrpc/clnt.c:3424:
+    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;
  }

--
Best regards, Vasileios Almpanis
Software Developer, Virtuozzo.

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to