Messages in this thread | | | Subject | Re: 2.6.12-rc4-mm2 - sleeping function called from invalid context at mm/slab.c:2502 | From | David Woodhouse <> | Date | Tue, 17 May 2005 18:04:23 +0100 |
| |
On Tue, 2005-05-17 at 09:55 -0700, Chris Wright wrote: > Here and up we are in netlink code which does netlink_trim to reduce > the skb data size before queing to socket. This does skb_clone with > gfp_any() flag. We aren't in softirq, so we get GFP_KERNEL flag set > even though in_atomic() is true (spin_lock held I'm assuming).
netlink_unicast() is only calling skb_clone() because we artificially increased the refcount on the skb in question.
As I understand it, we do that in order to prevent the skb from being lost if netlink_unicast() returns an error -- it normally frees the skb before returning in that case. Am I alone in thinking that behaviour is strange?
I'm really not fond of the refcount trick -- I suspect I'd be happier if we were just to try to keep track of sk_rmem_alloc so we never hit the condition in netlink_attachskb() which might cause it to fail.
-- dwmw2
- 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/
| |