[Devel] [PATCH RFC VZ10 1/2] ve/sunrpc: Refactor {rpc, write}_kill_tasks

Vasileios Almpanis vasileios.almpanis at virtuozzo.com
Fri May 29 13:43:58 MSK 2026


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 <vladimir.riabchun at virtuozzo.com>
> ---
>   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.



More information about the Devel mailing list