2020-07-14 06:45:46

by Zhang Changzhong

[permalink] [raw]
Subject: [PATCH net-next] can: silence remove_proc_entry warning

If can_init_proc() fail to create /proc/net/can directory,
can_remove_proc() will trigger a warning:

WARNING: CPU: 6 PID: 7133 at fs/proc/generic.c:672 remove_proc_entry+0x17b0
Kernel panic - not syncing: panic_on_warn set ...

Fix to return early from can_remove_proc() if can proc_dir
does not exists.

Signed-off-by: Zhang Changzhong <[email protected]>
---
net/can/proc.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/can/proc.c b/net/can/proc.c
index e6881bf..077af42 100644
--- a/net/can/proc.c
+++ b/net/can/proc.c
@@ -471,6 +471,9 @@ void can_init_proc(struct net *net)
*/
void can_remove_proc(struct net *net)
{
+ if (!net->can.proc_dir)
+ return;
+
if (net->can.pde_version)
remove_proc_entry(CAN_PROC_VERSION, net->can.proc_dir);

@@ -498,6 +501,5 @@ void can_remove_proc(struct net *net)
if (net->can.pde_rcvlist_sff)
remove_proc_entry(CAN_PROC_RCVLIST_SFF, net->can.proc_dir);

- if (net->can.proc_dir)
- remove_proc_entry("can", net->proc_net);
+ remove_proc_entry("can", net->proc_net);
}
--
1.8.3.1


2020-07-14 20:13:45

by Oliver Hartkopp

[permalink] [raw]
Subject: Re: [PATCH net-next] can: silence remove_proc_entry warning



On 14.07.20 08:44, Zhang Changzhong wrote:
> If can_init_proc() fail to create /proc/net/can directory,
> can_remove_proc() will trigger a warning:
>
> WARNING: CPU: 6 PID: 7133 at fs/proc/generic.c:672 remove_proc_entry+0x17b0
> Kernel panic - not syncing: panic_on_warn set ...
>
> Fix to return early from can_remove_proc() if can proc_dir
> does not exists.
>
> Signed-off-by: Zhang Changzhong <[email protected]>

Acked-by: Oliver Hartkopp <[email protected]>

Thanks!

> ---
> net/can/proc.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/net/can/proc.c b/net/can/proc.c
> index e6881bf..077af42 100644
> --- a/net/can/proc.c
> +++ b/net/can/proc.c
> @@ -471,6 +471,9 @@ void can_init_proc(struct net *net)
> */
> void can_remove_proc(struct net *net)
> {
> + if (!net->can.proc_dir)
> + return;
> +
> if (net->can.pde_version)
> remove_proc_entry(CAN_PROC_VERSION, net->can.proc_dir);
>
> @@ -498,6 +501,5 @@ void can_remove_proc(struct net *net)
> if (net->can.pde_rcvlist_sff)
> remove_proc_entry(CAN_PROC_RCVLIST_SFF, net->can.proc_dir);
>
> - if (net->can.proc_dir)
> - remove_proc_entry("can", net->proc_net);
> + remove_proc_entry("can", net->proc_net);
> }
>