On 2020-08-24, John Ogness <john.ogn...@linutronix.de> wrote:
> @@ -1157,6 +1431,14 @@ bool prb_reserve(struct prb_reserved_entry *e, struct 
> printk_ringbuffer *rb,
>               goto fail;
>       }
>  
> +     /*
> +      * New data is about to be reserved. Once that happens, previous
> +      * descriptors are no longer able to be extended. Finalize the
> +      * previous descriptor now so that it can be made available to
> +      * readers (when committed).
> +      */
> +     desc_finalize(desc_ring, DESC_ID(id - 1));
> +
>       d = to_desc(desc_ring, id);
>  
>       /*

Apparently this is not enough to guarantee that past descriptors are
finalized. I am able to reproduce a scenario where the finalization of a
certain descriptor never happens. That leaves the descriptor permanently
in the reserved queried state, which prevents any new records from being
created. I am investigating.

John Ogness

Reply via email to