Re: [PATCH printk v2 3/4] printk: Skip unfinalized records in panic

From: Petr Mladek
Date: Wed Oct 18 2023 - 10:33:00 EST


On Wed 2023-10-18 14:54:29, Petr Mladek wrote:
> On Tue 2023-10-17 23:31:25, John Ogness wrote:
> > On 2023-10-17, Petr Mladek <pmladek@xxxxxxxx> wrote:
> > > BTW: The support for data-less records were added by the commit
> > > ("printk: ringbuffer: support dataless records"). It was
> > > needed to handle empty lines: printk("\n"). It is strange
> > > that we skip them instead of printing the empty line.
> >
> > We do not skip them. That was the whole point of adding support for
> > data-less records. ;-)
> >
> > get_data() returns "" and @data_size=0

Ah, I see it now. The code really handles printk("\n") correctly.

There are two types of dataless records:

+ #define NO_LPOS 0x3. It is used for storing zero size data.

+ #define FAILED_LPOS 0x1. It is used when the code failed
to allocate enough space on the ring buffer or when
they were overwritten.

BLK_DATALESS() returns true for both of them.

Sigh, we should really distinguish in the comments when functions
handle the two situations different way. Especially we should not
use the ambiguous "dataless record" word.

I think about "empty line record" and "records with missing data".
And I would rename NO_LPOS to EMPTY_LINE_LPOS to make the meaning
more obvious.

Also it would make sense to use 0x2 for EMPTY_LINE_LPOS and

#define FAILED_LPOS 0x1
#define EMPTY_LINE_LPOS 0x2
#define DATALESS_LPOS_MASK (FAILED_LPOS | EMPTY_LINE_LPOS)

#define LPOS_DATALESS(lpos) ((lpos) & DATALESS_LPOS_MASK)

> > copy_data() returns true (but does not copy any data)
> >
> > prb_read() returns true (we are assuming it is finalized)
> >
> > _prb_read_valid() returns true
>
> This is not true if I read the code correctly.
>
> > prb_read_valid() return true
> >
> > record_print_text() creates a string with prefix and adds "\n"
> >
> > printk_get_next_message() returns something to print

If we used the right terms in the comments then they might stay short
and still be clear.

Best Regards,
Petr