Hi Eric, hmm, I think you are right. First 6LoWPAN implementation was developed as a part of MAC layer and code was based on this layer approach. But now 6lowpan is MAC-independent, it's just a netif_rx hook and looks like I missed this moment during migration. sorry for confusion. With best regards, Alexander 2011/9/1 Eric Dumazet <eric.dumazet@xxxxxxxxx>: > Le jeudi 01 septembre 2011 à 16:54 +0400, Alexander Smirnov a écrit : >> This patch fixes 2 issues in lowpan_skb_deliver function: >> 1. Check for return status of skb_copy call; >> 2. Use skb_copy with proper GFP flag depending on context. >> >> Signed-off-by: Alexander Smirnov <alex.bluesman.smirnov@xxxxxxxxx> >> --- >> net/ieee802154/6lowpan.c | 18 +++++++++++++++--- >> 1 files changed, 15 insertions(+), 3 deletions(-) >> >> diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c >> index cf304cc..16100be 100644 >> --- a/net/ieee802154/6lowpan.c >> +++ b/net/ieee802154/6lowpan.c >> @@ -477,9 +477,15 @@ static int lowpan_skb_deliver(struct sk_buff *skb, struct ipv6hdr *hdr) >> struct sk_buff *new; >> struct lowpan_dev_record *entry; >> int stat = NET_RX_SUCCESS; >> + gfp_t mask; >> >> - new = skb_copy_expand(skb, sizeof(struct ipv6hdr), skb_tailroom(skb), >> - GFP_KERNEL); >> + if (in_interrupt()) >> + mask = GFP_ATOMIC; >> + else >> + mask = GFP_KERNEL; > > I am not sure to understand if lowpan_skb_deliver() can be called in > pure process context. I feel we are in softirq handler or we have > disabled BH, so GFP_ATOMIC is the only choice. > > If you are unsure, you could use following helper : > > mask = gfp_any(); > >> + >> + new = skb_copy_expand(skb, sizeof(struct ipv6hdr), >> + skb_tailroom(skb), mask); >> kfree_skb(skb); >> > > -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html