Re: [PATCH 3/5] mm/vmalloc: Initialize VA's list node after unlink

Baoquan He
2022-06-09T13:30:44Z

On 06/09/22 at 02:36pm, Uladzislau Rezki wrote:
> >
> > On 06/07/22 at 11:34am, Uladzislau Rezki (Sony) wrote:
> > > A vmap_area can travel between different places. For example
> > > attached/detached to/from different rb-trees. In order to
> > > prevent fancy bugs, initialize a VA's list node after it is
> > > removed from the list, so it pairs with VA's rb_node which
> > > is also initialized.
> > >
> > > There is no functional change as a result of this patch.
> > >
> > > Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > > ---
> > > mm/vmalloc.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > > index 745e89eb6ca1..82771e555273 100644
> > > --- a/mm/vmalloc.c
> > > +++ b/mm/vmalloc.c
> > > @@ -978,7 +978,7 @@ __unlink_va(struct vmap_area *va, struct rb_root *root, bool augment)
> > > else
> > > rb_erase(&va->rb_node, root);
> > >
> > > - list_del(&va->list);
> > > + list_del_init(&va->list);
> >
> > Don't object this change, while list_del poison members, which is also
> > not bad?
> >
> It is not bad for sure. The main aim was to be align with what the
> RB_CLEAR_NODE() does, i.e. initialize VA when it is detached
> and be safe with list manipulation when it is detached. For example
> whether it is empty or not: list_empty(), etc.

Agree. list_del() can't make list_empty() work, and RB_CLEAR_NODE() has
done the clearing already.

Then this change looks reasonable to me, thanks.

Reviewed-by: Baoquan He <bhe@redhat.com>