Re: [PATCH 2.6.12-rc3-mm3] connector: add a fork connector

From: Andrew Morton
Date: Mon May 09 2005 - 16:13:08 EST


Evgeniy Polyakov <johnpol@xxxxxxxxxxx> wrote:
>
> > In the previous connector, cn_netlink_send(struct cn_msg *msg, u32
> > __groups) called alloc_skb(size, GFP_ATOMIC). Now a third parameter is
> > used with cn_netlink_send() in order to call alloc_skb(size, gfp_mask)
> > with a specific gfp_mask. So, I'm using GFP_ATOMIC as the third argument
> > to keep the same behavior.
>
> It was atomic there to allow non process context usage.
> Since do_fork() is executed in process context you can use GFP_KERNEL with
> __GFP_NOFAIL - it will guarantee memory allocation.

Please avoid using __GFP_NOFAIL.

__GFP_NOFAIL was introduced because we had lots of places in the kernel
which were doing:

try_again:
p = allocate_something();
if (!p) {
/* A am too lame to handle this */
delay_in_some_manner();
goto try_again;
}

__GFP_NOFAIL simply takes the above bad code and centralises it so it's
always done in the same way and so that it's easily greppable for. But
it's still bad (ie: deadlocky) code.

Well-behaved code should notice the allocation failure and should back out
gracefully.

-
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/