Re: [RFC PATCH v5 1/3] printk-rb: new printk ringbuffer implementation (writer)
From: Petr Mladek
Date: Tue Dec 03 2019 - 09:36:40 EST
On Tue 2019-12-03 15:13:36, John Ogness wrote:
> On 2019-12-02, Petr Mladek <pmladek@xxxxxxxx> wrote:
> >> +/*
> >> + * Sanity checker for reserve size. The ringbuffer code assumes that a data
> >> + * block does not exceed the maximum possible size that could fit within the
> >> + * ringbuffer. This function provides that basic size check so that the
> >> + * assumption is safe.
> >> + */
> >> +static bool data_check_size(struct prb_data_ring *data_ring, unsigned int size)
> >> +{
> >> + struct prb_data_block *db = NULL;
> >> +
> >> + /* Writers are not allowed to write data-less records. */
> >> + if (size == 0)
> >> + return false;
> >
> > I would personally let this decision to the API caller.
> >
> > The code actually have to support data-less records. They are used
> > when the descriptor is reserved but the data block can't get reserved.
>
> Exactly. Data-less records are how the ringbuffer identifies that data
> has been lost. If users were allowed to store data-less records, that
> destinction is no longer possible (unless I created some extra field in
> the descriptor). Does it even make sense for printk to store data-less
> records explicitly?
>From my POV, it does not make much sense.
> The current printk implementation silently ignores empty messages.
I am not able to find it. I only see that empty continuous framgments
are ignored in log_output(). Normal empty lines seems to be strored.
Well, I can't see any usecase for this. I think that we could ignore
all empty strings.
> > The above statement might create false feeling that it could not
> > happen later in the code. It might lead to bugs in writer code.
>
> Then let me change the statement to describe that data-less records are
> used internally by the ringbuffer and cannot be explicitly created by
> writers.
Sounds godo to me.
> > Also reader API users might not expect to get a "valid" data-less
> > record.
>
> Readers will never see them. The reader API implementation skips over
> data-less records.
Yeah. They will see bump in the seq number. We would need to
distinguish empty records and lost records as you wrote above.
It looks better to ignore empty records already during write.
Best Regards,
Petr