Messages in this thread | | | Date | Mon, 9 May 2005 14:08:36 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH 2.6.12-rc3-mm3] connector: add a fork connector |
| |
Evgeniy Polyakov <johnpol@2ka.mipt.ru> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |