Re: [PATCH v3 1/2] io_uring: Move from hlist to io_wq_work_node

From: Breno Leitao
Date: Fri Feb 24 2023 - 04:55:29 EST


Hello Krisman, thanks for the review

On Thu, Feb 23, 2023 at 04:02:25PM -0300, Gabriel Krisman Bertazi wrote:
> Breno Leitao <leitao@xxxxxxxxxx> writes:

> > static inline struct io_cache_entry *io_alloc_cache_get(struct io_alloc_cache *cache)
> > {
> > - if (!hlist_empty(&cache->list)) {
> > - struct hlist_node *node = cache->list.first;
> > + if (cache->list.next) {
> > + struct io_cache_entry *entry;
> >
> > - hlist_del(node);
> > - return container_of(node, struct io_cache_entry, node);
> > + entry = container_of(cache->list.next, struct io_cache_entry, node);
> > + cache->list.next = cache->list.next->next;
> > + return entry;
> > }
>
> From a quick look, I think you could use wq_stack_extract() here

True, we can use wq_stack_extract() in this patch, but, we would need to
revert to back to this code in the next patch. Remember that
wq_stack_extract() touches the stack->next->next, which will be
poisoned, causing a KASAN warning.

Here is relevant part of the code:

struct io_wq_work_node *wq_stack_extract(struct io_wq_work_node *stack)
{
struct io_wq_work_node *node = stack->next;
stack->next = node->next;