From: Jia-Ju Bai <baijiaju1...@163.com> Date: Sat, 10 Jun 2017 16:49:39 +0800
> The kernel may sleep under a rcu read lock in cfpkt_create_pfx, and the > function call path is: > cfcnfg_linkup_rsp (acquire the lock by rcu_read_lock) > cfctrl_linkdown_req > cfpkt_create > cfpkt_create_pfx > alloc_skb(GFP_KERNEL) --> may sleep > cfserl_receive (acquire the lock by rcu_read_lock) > cfpkt_split > cfpkt_create_pfx > alloc_skb(GFP_KERNEL) --> may sleep > > There is "in_interrupt" in cfpkt_create_pfx to decide use "GFP_KERNEL" or > "GFP_ATOMIC". In this situation, "GFP_KERNEL" is used because the function > is called under a rcu read lock, instead in interrupt. > > To fix it, only "GFP_ATOMIC" is used in cfpkt_create_pfx. > > Signed-off-by: Jia-Ju Bai <baijiaju1...@163.com> Applied and queued up for -stable.