Messages in this thread | | | Date | Tue, 20 Aug 2019 19:16:49 +0900 | From | Sergey Senozhatsky <> | Subject | Re: [RFC PATCH v4 4/9] printk-rb: initialize new descriptors as invalid |
| |
On (08/20/19 11:23), Petr Mladek wrote: > > is no risk of the descriptor unexpectedly being determined as > > valid due to dataring head overflowing/wrapping. > > Please, provide more details about the solved race. Is it because > some reader could have reference to an invalid (reused) descriptor? > Can be these invalid descriptors be member of the list?
As far as I understand, such descriptors can be on the list:
prb_reserve() assign_desc() // pick a new never used descr i = atomic_fetch_inc(&rb->desc_next_unused); d = &rb->descs[i] dataring_desc_init(&d->desc); return d buf = dataring_push() // the oldest data is reserved, but not commited ret = get_new_lpos() if (ret) dataring_desc_init() return NULL if (!buf) numlist_push()
_datablock_valid() has a "desc->begin_lpos == desc->next_lpos" check.
-ss
| |