On Tue 2020-05-05 11:45:06, Pavel Tatashin wrote: > kmsg_dump() allows to dump kmesg buffer for various system events: oops, > panic, reboot, etc. It provides an interface to register a callback call > for clients, and in that callback interface there is a field "max_reason" > which gets ignored unless always_kmsg_dump is passed as kernel parameter. > > Allow clients to decide max_reason, and keep the current behavior when > max_reason is not set. > > Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> > --- > include/linux/kmsg_dump.h | 1 + > kernel/printk/printk.c | 15 +++++++++++---- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h > index 2e7a1e032c71..cfc042066be7 100644 > --- a/include/linux/kmsg_dump.h > +++ b/include/linux/kmsg_dump.h > @@ -28,6 +28,7 @@ enum kmsg_dump_reason { > KMSG_DUMP_RESTART, > KMSG_DUMP_HALT, > KMSG_DUMP_POWEROFF, > + KMSG_DUMP_MAX > }; > > /** > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index 9a9b6156270b..1aab69a8a2bf 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -3157,12 +3157,19 @@ void kmsg_dump(enum kmsg_dump_reason reason) > struct kmsg_dumper *dumper; > unsigned long flags; > > - if ((reason > KMSG_DUMP_OOPS) && !always_kmsg_dump) > - return; > - > rcu_read_lock(); > list_for_each_entry_rcu(dumper, &dump_list, list) { > - if (dumper->max_reason && reason > dumper->max_reason) > + enum kmsg_dump_reason cur_reason = dumper->max_reason; If this code is still in the next version, please, rename this variable to max_reason or so. "cur" is ambiguous. It might be current dumper or current message which confused me later in the code ;-) Best Regards, Petr > + > + /* > + * If client has not provided a specific max_reason, default > + * to KMSG_DUMP_OOPS, unless always_kmsg_dump was set. > + */ > + if (cur_reason == KMSG_DUMP_UNDEF) { > + cur_reason = always_kmsg_dump ? KMSG_DUMP_MAX : > + KMSG_DUMP_OOPS; > + } > + if (reason > cur_reason) > continue; > > /* initialize iterator with data about the stored records */ > -- > 2.25.1