Message ID | 20211126180101.27818-7-digetx@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | Introduce power-off+restart call chain API | expand |
On Fri, Nov 26, 2021 at 7:02 PM Dmitry Osipenko <digetx@gmail.com> wrote: > > Emit warning if unregister_restart_handler() fails since it never should > fail. This will ease further API development by catching mistakes early. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > kernel/reboot.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/reboot.c b/kernel/reboot.c > index e6659ae329f1..f0e7b9c13f6b 100644 > --- a/kernel/reboot.c > +++ b/kernel/reboot.c > @@ -210,7 +210,7 @@ EXPORT_SYMBOL(register_restart_handler); > */ > int unregister_restart_handler(struct notifier_block *nb) > { > - return atomic_notifier_chain_unregister(&restart_handler_list, nb); > + return WARN_ON(atomic_notifier_chain_unregister(&restart_handler_list, nb)); The only reason why it can fail is if the object pointed to by nb is not in the chain. Why WARN() about this? And what about systems with panic_on_warn set? > } > EXPORT_SYMBOL(unregister_restart_handler); > > -- > 2.33.1 >
10.12.2021 21:32, Rafael J. Wysocki пишет: > On Fri, Nov 26, 2021 at 7:02 PM Dmitry Osipenko <digetx@gmail.com> wrote: >> >> Emit warning if unregister_restart_handler() fails since it never should >> fail. This will ease further API development by catching mistakes early. >> >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >> --- >> kernel/reboot.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/kernel/reboot.c b/kernel/reboot.c >> index e6659ae329f1..f0e7b9c13f6b 100644 >> --- a/kernel/reboot.c >> +++ b/kernel/reboot.c >> @@ -210,7 +210,7 @@ EXPORT_SYMBOL(register_restart_handler); >> */ >> int unregister_restart_handler(struct notifier_block *nb) >> { >> - return atomic_notifier_chain_unregister(&restart_handler_list, nb); >> + return WARN_ON(atomic_notifier_chain_unregister(&restart_handler_list, nb)); > > The only reason why it can fail is if the object pointed to by nb is > not in the chain. I had exactly this case where object wasn't in the chain due to a bug and this warning was very helpful. > Why WARN() about this? And what about systems with > panic_on_warn set? That warning condition will never happen normally, only when something is seriously wrong. Those systems with panic_on_warn will get what was they asked for.
On Fri, Dec 10, 2021 at 7:54 PM Dmitry Osipenko <digetx@gmail.com> wrote: > > 10.12.2021 21:32, Rafael J. Wysocki пишет: > > On Fri, Nov 26, 2021 at 7:02 PM Dmitry Osipenko <digetx@gmail.com> wrote: > >> > >> Emit warning if unregister_restart_handler() fails since it never should > >> fail. This will ease further API development by catching mistakes early. > >> > >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > >> --- > >> kernel/reboot.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/kernel/reboot.c b/kernel/reboot.c > >> index e6659ae329f1..f0e7b9c13f6b 100644 > >> --- a/kernel/reboot.c > >> +++ b/kernel/reboot.c > >> @@ -210,7 +210,7 @@ EXPORT_SYMBOL(register_restart_handler); > >> */ > >> int unregister_restart_handler(struct notifier_block *nb) > >> { > >> - return atomic_notifier_chain_unregister(&restart_handler_list, nb); > >> + return WARN_ON(atomic_notifier_chain_unregister(&restart_handler_list, nb)); > > > > The only reason why it can fail is if the object pointed to by nb is > > not in the chain. > > I had exactly this case where object wasn't in the chain due to a bug > and this warning was very helpful. During the development. In production it would be rather annoying. > > Why WARN() about this? And what about systems with > > panic_on_warn set? > > That warning condition will never happen normally, only when something > is seriously wrong. > > Those systems with panic_on_warn will get what was they asked for. They may not be asking for panicking on bugs in the reboot notifier code, though. That's what your change is making them panic on.
10.12.2021 22:08, Rafael J. Wysocki пишет: > On Fri, Dec 10, 2021 at 7:54 PM Dmitry Osipenko <digetx@gmail.com> wrote: >> >> 10.12.2021 21:32, Rafael J. Wysocki пишет: >>> On Fri, Nov 26, 2021 at 7:02 PM Dmitry Osipenko <digetx@gmail.com> wrote: >>>> >>>> Emit warning if unregister_restart_handler() fails since it never should >>>> fail. This will ease further API development by catching mistakes early. >>>> >>>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >>>> --- >>>> kernel/reboot.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/kernel/reboot.c b/kernel/reboot.c >>>> index e6659ae329f1..f0e7b9c13f6b 100644 >>>> --- a/kernel/reboot.c >>>> +++ b/kernel/reboot.c >>>> @@ -210,7 +210,7 @@ EXPORT_SYMBOL(register_restart_handler); >>>> */ >>>> int unregister_restart_handler(struct notifier_block *nb) >>>> { >>>> - return atomic_notifier_chain_unregister(&restart_handler_list, nb); >>>> + return WARN_ON(atomic_notifier_chain_unregister(&restart_handler_list, nb)); >>> >>> The only reason why it can fail is if the object pointed to by nb is >>> not in the chain. >> >> I had exactly this case where object wasn't in the chain due to a bug >> and this warning was very helpful. > > During the development. In production it would be rather annoying. > >>> Why WARN() about this? And what about systems with >>> panic_on_warn set? >> >> That warning condition will never happen normally, only when something >> is seriously wrong. >> >> Those systems with panic_on_warn will get what was they asked for. > > They may not be asking for panicking on bugs in the reboot notifier > code, though. That's what your change is making them panic on. > Alright, I'll drop the warnings and turn the warning about uniqueness into error or warning message.
diff --git a/kernel/reboot.c b/kernel/reboot.c index e6659ae329f1..f0e7b9c13f6b 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -210,7 +210,7 @@ EXPORT_SYMBOL(register_restart_handler); */ int unregister_restart_handler(struct notifier_block *nb) { - return atomic_notifier_chain_unregister(&restart_handler_list, nb); + return WARN_ON(atomic_notifier_chain_unregister(&restart_handler_list, nb)); } EXPORT_SYMBOL(unregister_restart_handler);
Emit warning if unregister_restart_handler() fails since it never should fail. This will ease further API development by catching mistakes early. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- kernel/reboot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)