netpoll: use GFP_ATOMIC in slave_enable_netpoll() and __netpoll_setup()
slave_enable_netpoll() and __netpoll_setup() may be called with read_lock() held, so should use GFP_ATOMIC to allocate memory. Eric suggested to pass gfp flags to __netpoll_setup(). Cc: Eric Dumazet <eric.dumazet@gmail.com> Cc: "David S. Miller" <davem@davemloft.net> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Cong Wang <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

szülő
ddf343f635
commit
47be03a28c
@@ -669,19 +669,20 @@ static void vlan_dev_poll_controller(struct net_device *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
static int vlan_dev_netpoll_setup(struct net_device *dev, struct netpoll_info *npinfo)
|
||||
static int vlan_dev_netpoll_setup(struct net_device *dev, struct netpoll_info *npinfo,
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct vlan_dev_priv *info = vlan_dev_priv(dev);
|
||||
struct net_device *real_dev = info->real_dev;
|
||||
struct netpoll *netpoll;
|
||||
int err = 0;
|
||||
|
||||
netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
|
||||
netpoll = kzalloc(sizeof(*netpoll), gfp);
|
||||
err = -ENOMEM;
|
||||
if (!netpoll)
|
||||
goto out;
|
||||
|
||||
err = __netpoll_setup(netpoll, real_dev);
|
||||
err = __netpoll_setup(netpoll, real_dev, gfp);
|
||||
if (err) {
|
||||
kfree(netpoll);
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user