datapath: Don't call genlmsg_reply() under rcu_read_lock().
authorJesse Gross <jesse@nicira.com>
Fri, 27 May 2011 22:57:28 +0000 (15:57 -0700)
committerJesse Gross <jesse@nicira.com>
Fri, 27 May 2011 23:37:34 +0000 (16:37 -0700)
commitdf2fa9b50e1c0e93c6be1d31a5d69eb4f077add3
tree4f3681b219227f716188b51c839f65b0b81ee9c4
parent01b389b1109fc667c37c1ace3bded423d9f38637
datapath: Don't call genlmsg_reply() under rcu_read_lock().

genlmsg_reply() indirectly makes a call to kmalloc but takes no
GFP flags, instead using GFP_ATOMIC if in a softirq and GFP_KERNEL
otherwise.  However, here we hold rcu_read_lock(), which requires
GFP_ATOMIC but is not a softirq.  Since we've already built the
reply message, it is safe to release rcu_read_lock(), so do that
before calling genlmsg_reply().

Signed-off-by: Jesse Gross <jesse@nicira.com>
CC: Hao Zheng <hzheng@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
datapath/datapath.c