Re: [PATCH -tip] mm: introduce __GFP_PANIC modifier

From: Andrew Morton
Date: Mon May 04 2009 - 15:43:02 EST


On Mon, 4 May 2009 23:21:17 +0400
Cyrill Gorcunov <gorcunov@xxxxxxxxx> wrote:

> [Andrew Morton - Mon, May 04, 2009 at 11:53:35AM -0700]
> | On Mon, 4 May 2009 09:47:45 -0400 (EDT)
> | Christoph Lameter <cl@xxxxxxxxx> wrote:
> |
> | >
> | >
> | > Could you try to avoid consuming another GFP flag? __GFP_BITS_SHIFT is
> | > used elsewhere to figure out where to put miscellanous flags into the gfp
> | > mask. This is pretty limited right now and so the patch does work.
> |
> | hm, yes, there are seven bits left.
> |
> | afaict bit 3 (0x08) is unused?
> |
> | Is __GFP_PANIC very useful? I expect it will permit a very small code
> | saving at a relatively small number of callsites, all of which are
> | __init anyway?
> |
>
> Actually the issue with possible NULL deref already fixed in -tip
> tree commit 9a8709d. There was rather an idea on what will be more
> convenient -- call for __GFP_NOFAIL or use BUG_ON on allocation
> failure or call kmalloc with __GFP_PANIC and forget about if it could
> fail :). Since Christoph said that it's discommended to introduce
> new flag -- I'm fine with that.
>

Well. Allowing the caller to dereference the NULL pointer is a good
solution. It gives us the runtime behaviour we want, and requires no
new code at all. Usages of this technique should be commented so that
people don't "fix" it.


An alternative to __GFP_PANIC might be:

- foo = kmalloc(size, GFP_KERNEL);
+ foo = panic_if_null(kmalloc(size, GFP_KERNEL));

void *panic_if_null(void *p)
{
if (unlikely(p == NULL))
panic("NULL pointer panic");
return p;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/