Re: [PATCH -next] ipc: use GFP_ATOMIC under spin lock
From: Matthew Wilcox
Date: Tue Apr 28 2020 - 21:49:09 EST
On Tue, Apr 28, 2020 at 05:14:20PM -0700, Andrew Morton wrote:
> On Tue, 28 Apr 2020 04:14:03 -0700 Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote:
>
> > On Tue, Apr 28, 2020 at 03:47:36AM +0000, Wei Yongjun wrote:
> > > The function ipc_id_alloc() is called from ipc_addid(), in which
> > > a spin lock is held, so we should use GFP_ATOMIC instead.
> > >
> > > Fixes: de5738d1c364 ("ipc: convert ipcs_idr to XArray")
> > > Signed-off-by: Wei Yongjun <weiyongjun1@xxxxxxxxxx>
> >
> > I see why you think that, but it's not true. Yes, we hold a spinlock, but
> > the spinlock is in an object which is not reachable from any other CPU.
> > So it's not possible to deadlock.
>
> um, then why are we taking it?
The lock has to be held by the time 'new' is findable because 'new' is
not completely constructed at that point. The finder will try to acquire
the spinlock before looking at the uninitialised fields, so it's safe.
But it's not a common idiom we use at all.
> > This probably confuses all kinds
> > of automated checkers,
>
> A big fat code comment would reduce the email traffic?
I think I can rewrite this to take the spinlock after doing the allocation.