Re: [PATCH v2 3/3] percpu: improve allocation success rate for non-GFP_KERNEL callers

From: Tejun Heo
Date: Mon Feb 27 2017 - 17:39:26 EST


Hello, Tahsin.

On Mon, Feb 27, 2017 at 12:37:59PM -0800, Tahsin Erdogan wrote:
> > Ah, absolutely, that's a stupid failure but we should be able to fix
> > that by making the blkg functions take gfp mask and allocate
> > accordingly, right? It'll probably take preallocation tricks because
> > of locking but should be doable.
>
> My initial goal was to allow calls to vmalloc(), but I now see the
> challenges in that
> approach.

I'd love to see that working too but this is a different issue. Even
GFP_ATOMIC can fail under pressure and it's kinda wrong to depend on
that for userspace interactions.

> Doing preallocations would probably work but not sure if that can be
> done without
> complicating code too much. Could you describe what you have in mind?

So, blkg_create() already takes @new_blkg argument which is the
preallocated blkg and used during q init. Wouldn't it work to make
blkg_lookup_create() take @new_blkg too and pass it down to
blkg_create() (and also free it if it doesn't get used)? Then,
blkg_conf_prep() can always (or after a failure with -ENOMEM) allocate
a new blkg before calling into blkg_lookup_create(). I don't think
it'll complicate the code path that much.

Thanks.

--
tejun