[PATCH] panic: only warn about deprecated panic_print on write access

Gal Pressman posted 1 patch 1 month ago
kernel/panic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] panic: only warn about deprecated panic_print on write access
Posted by Gal Pressman 1 month ago
The panic_print_deprecated() warning is being triggered on both read and
write operations to the panic_print parameter.

This causes spurious warnings when users run 'sysctl -a' to list all
sysctl values, since that command reads /proc/sys/kernel/panic_print and
triggers the deprecation notice.

Modify the handlers to only emit the deprecation warning when the
parameter is actually being set:

 - sysctl_panic_print_handler(): check 'write' flag before warning.
 - panic_print_get(): remove the deprecation call entirely.

This way, users are only warned when they actively try to use the
deprecated parameter, not when passively querying system state.

Fixes: ee13240cd78b ("panic: add note that panic_print sysctl interface is deprecated")
Fixes: 2683df6539cb ("panic: add note that 'panic_print' parameter is deprecated")
Cc: Feng Tang <feng.tang@linux.alibaba.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Nimrod Oren <noren@nvidia.com>
Signed-off-by: Gal Pressman <gal@nvidia.com>
---
 kernel/panic.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/panic.c b/kernel/panic.c
index 0d52210a9e2b..0c20fcaae98a 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -131,7 +131,8 @@ static int proc_taint(const struct ctl_table *table, int write,
 static int sysctl_panic_print_handler(const struct ctl_table *table, int write,
 			   void *buffer, size_t *lenp, loff_t *ppos)
 {
-	panic_print_deprecated();
+	if (write)
+		panic_print_deprecated();
 	return proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
 }
 
@@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
 
 static int panic_print_get(char *val, const struct kernel_param *kp)
 {
-	panic_print_deprecated();
 	return  param_get_ulong(val, kp);
 }
 
-- 
2.40.1
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Feng Tang 1 month ago
Hi Gal,

Thanks for the fix!

On Tue, Jan 06, 2026 at 06:33:21PM +0200, Gal Pressman wrote:
> The panic_print_deprecated() warning is being triggered on both read and
> write operations to the panic_print parameter.
> 
> This causes spurious warnings when users run 'sysctl -a' to list all
> sysctl values, since that command reads /proc/sys/kernel/panic_print and
> triggers the deprecation notice.
> 
> Modify the handlers to only emit the deprecation warning when the
> parameter is actually being set:
> 
>  - sysctl_panic_print_handler(): check 'write' flag before warning.
>  - panic_print_get(): remove the deprecation call entirely.
> 
> This way, users are only warned when they actively try to use the
> deprecated parameter, not when passively querying system state.
> 
> Fixes: ee13240cd78b ("panic: add note that panic_print sysctl interface is deprecated")
> Fixes: 2683df6539cb ("panic: add note that 'panic_print' parameter is deprecated")
> Cc: Feng Tang <feng.tang@linux.alibaba.com>
> Reviewed-by: Mark Bloch <mbloch@nvidia.com>
> Reviewed-by: Nimrod Oren <noren@nvidia.com>
> Signed-off-by: Gal Pressman <gal@nvidia.com>
> ---
>  kernel/panic.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/panic.c b/kernel/panic.c
> index 0d52210a9e2b..0c20fcaae98a 100644
> --- a/kernel/panic.c
> +++ b/kernel/panic.c
> @@ -131,7 +131,8 @@ static int proc_taint(const struct ctl_table *table, int write,
>  static int sysctl_panic_print_handler(const struct ctl_table *table, int write,
>  			   void *buffer, size_t *lenp, loff_t *ppos)
>  {
> -	panic_print_deprecated();
> +	if (write)
> +		panic_print_deprecated();

This makes sense to me, as 'sysctl -a' is a very common usage.

>  	return proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
>  }
>  
> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
>  
>  static int panic_print_get(char *val, const struct kernel_param *kp)
>  {
> -	panic_print_deprecated();

Actually this was intentional, in one of the patch version, this
panic_print_get() was not there but reusing the param_get_ulong().

It was added later as sometimes developer do want to runtime check
the current 'panic_print' setting through /sys/module/kernel/parameters/
interface, and I thought it may be better to give the warning.

Thanks,
Feng

>  	return  param_get_ulong(val, kp);
>  }
>  
> -- 
> 2.40.1
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Gal Pressman 1 month ago
On 07/01/2026 5:00, Feng Tang wrote:
>> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
>>  
>>  static int panic_print_get(char *val, const struct kernel_param *kp)
>>  {
>> -	panic_print_deprecated();
> 
> Actually this was intentional, in one of the patch version, this
> panic_print_get() was not there but reusing the param_get_ulong().
> 
> It was added later as sometimes developer do want to runtime check
> the current 'panic_print' setting through /sys/module/kernel/parameters/
> interface, and I thought it may be better to give the warning.

I figured it would make sense to keep the behaviors consistent.
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Feng Tang 1 month ago
On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
> On 07/01/2026 5:00, Feng Tang wrote:
> >> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
> >>  
> >>  static int panic_print_get(char *val, const struct kernel_param *kp)
> >>  {
> >> -	panic_print_deprecated();
> > 
> > Actually this was intentional, in one of the patch version, this
> > panic_print_get() was not there but reusing the param_get_ulong().
> > 
> > It was added later as sometimes developer do want to runtime check
> > the current 'panic_print' setting through /sys/module/kernel/parameters/
> > interface, and I thought it may be better to give the warning.
> 
> I figured it would make sense to keep the behaviors consistent.

When people run 'sysctl -a', in 99.9% cases, the users don't care
'panic_print' or even don't know what 'panic_print' is, that's why
I think removing it makes sense.

But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
giving a warning is meaningful.

If you insist so, the cleaner way would be 

diff --git a/kernel/panic.c b/kernel/panic.c
index 0d52210a9e2b..86b927a695a0 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -1012,15 +1012,9 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
 	return  param_set_ulong(val, kp);
 }
 
-static int panic_print_get(char *val, const struct kernel_param *kp)
-{
-	panic_print_deprecated();
-	return  param_get_ulong(val, kp);
-}
-
 static const struct kernel_param_ops panic_print_ops = {
 	.set	= panic_print_set,
-	.get	= panic_print_get,
+	.get	= param_get_ulong,
 };
 __core_param_cb(panic_print, &panic_print_ops, &panic_print, 0644);
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Petr Mladek 4 weeks, 1 day ago
On Wed 2026-01-07 15:20:44, Feng Tang wrote:
> On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
> > On 07/01/2026 5:00, Feng Tang wrote:
> > >> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
> > >>  
> > >>  static int panic_print_get(char *val, const struct kernel_param *kp)
> > >>  {
> > >> -	panic_print_deprecated();
> > > 
> > > Actually this was intentional, in one of the patch version, this
> > > panic_print_get() was not there but reusing the param_get_ulong().
> > > 
> > > It was added later as sometimes developer do want to runtime check
> > > the current 'panic_print' setting through /sys/module/kernel/parameters/
> > > interface, and I thought it may be better to give the warning.
> > 
> > I figured it would make sense to keep the behaviors consistent.

I see.

> When people run 'sysctl -a', in 99.9% cases, the users don't care
> 'panic_print' or even don't know what 'panic_print' is, that's why
> I think removing it makes sense.
>
> But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
> giving a warning is meaningful.

Makes perfect sense.

We need to make people aware that "panic_print" will eventually go
away. 'sysctl -a' is different because it prints all values and
there is big chance that the caller is not interested in "panic_print"
at all.

It makes sense to remove the warning from sysctl read. But I would
keep it in sysfs read.

Best Regards,
Petr
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Gal Pressman 3 weeks, 6 days ago
On 08/01/2026 17:52, Petr Mladek wrote:
> On Wed 2026-01-07 15:20:44, Feng Tang wrote:
>> On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
>>> On 07/01/2026 5:00, Feng Tang wrote:
>>>>> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
>>>>>  
>>>>>  static int panic_print_get(char *val, const struct kernel_param *kp)
>>>>>  {
>>>>> -	panic_print_deprecated();
>>>>
>>>> Actually this was intentional, in one of the patch version, this
>>>> panic_print_get() was not there but reusing the param_get_ulong().
>>>>
>>>> It was added later as sometimes developer do want to runtime check
>>>> the current 'panic_print' setting through /sys/module/kernel/parameters/
>>>> interface, and I thought it may be better to give the warning.
>>>
>>> I figured it would make sense to keep the behaviors consistent.
> 
> I see.
> 
>> When people run 'sysctl -a', in 99.9% cases, the users don't care
>> 'panic_print' or even don't know what 'panic_print' is, that's why
>> I think removing it makes sense.
>>
>> But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
>> giving a warning is meaningful.
> 
> Makes perfect sense.
> 
> We need to make people aware that "panic_print" will eventually go
> away. 'sysctl -a' is different because it prints all values and
> there is big chance that the caller is not interested in "panic_print"
> at all.
> 
> It makes sense to remove the warning from sysctl read. But I would
> keep it in sysfs read.

The sysfs entry exhibits the same issue, just different command:

# systool -m kernel -v

Or:

# grep . /sys/module/kernel/parameters/*
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Feng Tang 3 weeks, 5 days ago
On Sun, Jan 11, 2026 at 10:28:55AM +0200, Gal Pressman wrote:
> On 08/01/2026 17:52, Petr Mladek wrote:
> > On Wed 2026-01-07 15:20:44, Feng Tang wrote:
> >> On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
> >>> On 07/01/2026 5:00, Feng Tang wrote:
> >>>>> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
> >>>>>  
> >>>>>  static int panic_print_get(char *val, const struct kernel_param *kp)
> >>>>>  {
> >>>>> -	panic_print_deprecated();
> >>>>
> >>>> Actually this was intentional, in one of the patch version, this
> >>>> panic_print_get() was not there but reusing the param_get_ulong().
> >>>>
> >>>> It was added later as sometimes developer do want to runtime check
> >>>> the current 'panic_print' setting through /sys/module/kernel/parameters/
> >>>> interface, and I thought it may be better to give the warning.
> >>>
> >>> I figured it would make sense to keep the behaviors consistent.
> > 
> > I see.
> > 
> >> When people run 'sysctl -a', in 99.9% cases, the users don't care
> >> 'panic_print' or even don't know what 'panic_print' is, that's why
> >> I think removing it makes sense.
> >>
> >> But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
> >> giving a warning is meaningful.
> > 
> > Makes perfect sense.
> > 
> > We need to make people aware that "panic_print" will eventually go
> > away. 'sysctl -a' is different because it prints all values and
> > there is big chance that the caller is not interested in "panic_print"
> > at all.
> > 
> > It makes sense to remove the warning from sysctl read. But I would
> > keep it in sysfs read.
> 
> The sysfs entry exhibits the same issue, just different command:
> 
> # systool -m kernel -v
> 
> Or:
> 
> # grep . /sys/module/kernel/parameters/*

Yes, when user checks the kernel parameters, I think it's better to
give them a notice (it's a pr_info_once(), which only prints once
for the whole power cycle).

Thanks,
Feng
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Gal Pressman 3 weeks, 5 days ago
On 12/01/2026 5:32, Feng Tang wrote:
> On Sun, Jan 11, 2026 at 10:28:55AM +0200, Gal Pressman wrote:
>> On 08/01/2026 17:52, Petr Mladek wrote:
>>> On Wed 2026-01-07 15:20:44, Feng Tang wrote:
>>>> On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
>>>>> On 07/01/2026 5:00, Feng Tang wrote:
>>>>>>> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
>>>>>>>  
>>>>>>>  static int panic_print_get(char *val, const struct kernel_param *kp)
>>>>>>>  {
>>>>>>> -	panic_print_deprecated();
>>>>>>
>>>>>> Actually this was intentional, in one of the patch version, this
>>>>>> panic_print_get() was not there but reusing the param_get_ulong().
>>>>>>
>>>>>> It was added later as sometimes developer do want to runtime check
>>>>>> the current 'panic_print' setting through /sys/module/kernel/parameters/
>>>>>> interface, and I thought it may be better to give the warning.
>>>>>
>>>>> I figured it would make sense to keep the behaviors consistent.
>>>
>>> I see.
>>>
>>>> When people run 'sysctl -a', in 99.9% cases, the users don't care
>>>> 'panic_print' or even don't know what 'panic_print' is, that's why
>>>> I think removing it makes sense.
>>>>
>>>> But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
>>>> giving a warning is meaningful.
>>>
>>> Makes perfect sense.
>>>
>>> We need to make people aware that "panic_print" will eventually go
>>> away. 'sysctl -a' is different because it prints all values and
>>> there is big chance that the caller is not interested in "panic_print"
>>> at all.
>>>
>>> It makes sense to remove the warning from sysctl read. But I would
>>> keep it in sysfs read.
>>
>> The sysfs entry exhibits the same issue, just different command:
>>
>> # systool -m kernel -v
>>
>> Or:
>>
>> # grep . /sys/module/kernel/parameters/*
> 
> Yes, when user checks the kernel parameters, I think it's better to
> give them a notice (it's a pr_info_once(), which only prints once
> for the whole power cycle).
This log message causes a lot of noise for people who have no idea what
panic_print is.
We started seeing this print internally, and it took a long time and
significant resources to figure out what changed and if we were doing
anything wrong in our environments.

Seeing a deprecation notice is alarming, especially if you don't know
what is being deprecated or how it affects you. In my opinion, we
shouldn't print this unless someone actually uses panic_print.
Re: [PATCH] panic: only warn about deprecated panic_print on write access
Posted by Petr Mladek 3 weeks, 4 days ago
On Mon 2026-01-12 08:48:37, Gal Pressman wrote:
> On 12/01/2026 5:32, Feng Tang wrote:
> > On Sun, Jan 11, 2026 at 10:28:55AM +0200, Gal Pressman wrote:
> >> On 08/01/2026 17:52, Petr Mladek wrote:
> >>> On Wed 2026-01-07 15:20:44, Feng Tang wrote:
> >>>> On Wed, Jan 07, 2026 at 08:41:22AM +0200, Gal Pressman wrote:
> >>>>> On 07/01/2026 5:00, Feng Tang wrote:
> >>>>>>> @@ -1014,7 +1015,6 @@ static int panic_print_set(const char *val, const struct kernel_param *kp)
> >>>>>>>  
> >>>>>>>  static int panic_print_get(char *val, const struct kernel_param *kp)
> >>>>>>>  {
> >>>>>>> -	panic_print_deprecated();
> >>>>>>
> >>>>>> Actually this was intentional, in one of the patch version, this
> >>>>>> panic_print_get() was not there but reusing the param_get_ulong().
> >>>>>>
> >>>>>> It was added later as sometimes developer do want to runtime check
> >>>>>> the current 'panic_print' setting through /sys/module/kernel/parameters/
> >>>>>> interface, and I thought it may be better to give the warning.
> >>>>>
> >>>>> I figured it would make sense to keep the behaviors consistent.
> >>>
> >>> I see.
> >>>
> >>>> When people run 'sysctl -a', in 99.9% cases, the users don't care
> >>>> 'panic_print' or even don't know what 'panic_print' is, that's why
> >>>> I think removing it makes sense.
> >>>>
> >>>> But for a user running 'cat /sys/module/kernel/parameters/panic_rint',
> >>>> giving a warning is meaningful.
> >>>
> >>> Makes perfect sense.
> >>>
> >>> We need to make people aware that "panic_print" will eventually go
> >>> away. 'sysctl -a' is different because it prints all values and
> >>> there is big chance that the caller is not interested in "panic_print"
> >>> at all.
> >>>
> >>> It makes sense to remove the warning from sysctl read. But I would
> >>> keep it in sysfs read.
> >>
> >> The sysfs entry exhibits the same issue, just different command:
> >>
> >> # systool -m kernel -v
> >>
> >> Or:
> >>
> >> # grep . /sys/module/kernel/parameters/*

I see.

> > Yes, when user checks the kernel parameters, I think it's better to
> > give them a notice (it's a pr_info_once(), which only prints once
> > for the whole power cycle).
> This log message causes a lot of noise for people who have no idea what
> panic_print is.
> We started seeing this print internally, and it took a long time and
> significant resources to figure out what changed and if we were doing
> anything wrong in our environments.
> 
> Seeing a deprecation notice is alarming, especially if you don't know
> what is being deprecated or how it affects you. In my opinion, we
> shouldn't print this unless someone actually uses panic_print.

I am fine with printing the warning only when the value is
modified (set/write).

Best Regards,
Petr

PS: Sigh, it is hard to change or remove an interface. It is always
    better to think twice before introducing one.