[PATCH] proc/proc_sysctl: Modify the order of scheduling function calls

Li zeming posted 1 patch 3 years, 7 months ago
fs/proc/proc_sysctl.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
[PATCH] proc/proc_sysctl: Modify the order of scheduling function calls
Posted by Li zeming 3 years, 7 months ago
When the ctl_table_header object is judged to be valid, the scheduling
check is performed again.

Signed-off-by: Li zeming <zeming@nfschina.com>
---
 fs/proc/proc_sysctl.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
index 50ba9e4fb284..36921e2ebeb0 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -1729,11 +1729,10 @@ static void drop_sysctl_table(struct ctl_table_header *header)
 void unregister_sysctl_table(struct ctl_table_header * header)
 {
 	int nr_subheaders;
-	might_sleep();
-
 	if (header == NULL)
 		return;
 
+	might_sleep();
 	nr_subheaders = count_subheaders(header->ctl_table_arg);
 	if (unlikely(nr_subheaders > 1)) {
 		struct ctl_table_header **subheaders;
-- 
2.18.2
Re: [PATCH] proc/proc_sysctl: Modify the order of scheduling function calls
Posted by Matthew Wilcox 3 years, 7 months ago
On Mon, Sep 05, 2022 at 09:29:25AM +0800, Li zeming wrote:
> When the ctl_table_header object is judged to be valid, the scheduling
> check is performed again.

No, we want the check in all cases, even if the header is NULL.

> Signed-off-by: Li zeming <zeming@nfschina.com>
> ---
>  fs/proc/proc_sysctl.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
> index 50ba9e4fb284..36921e2ebeb0 100644
> --- a/fs/proc/proc_sysctl.c
> +++ b/fs/proc/proc_sysctl.c
> @@ -1729,11 +1729,10 @@ static void drop_sysctl_table(struct ctl_table_header *header)
>  void unregister_sysctl_table(struct ctl_table_header * header)
>  {
>  	int nr_subheaders;
> -	might_sleep();
> -
>  	if (header == NULL)
>  		return;
>  
> +	might_sleep();
>  	nr_subheaders = count_subheaders(header->ctl_table_arg);
>  	if (unlikely(nr_subheaders > 1)) {
>  		struct ctl_table_header **subheaders;
> -- 
> 2.18.2
>