diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-27 18:36:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-29 17:58:37 -0400 |
commit | a8779ec1c5e60548b7b661a8d74a8cecf7775690 (patch) | |
tree | 26c3e8d991b42c16f48c99e4f9fd117233ae8b21 /drivers/net | |
parent | 3f705f73a0ab345321ef6e5a293c04bf7e9df818 (diff) |
netpoll: Remove gfp parameter from __netpoll_setup
The gfp parameter was added in:
commit 47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af
Author: Amerigo Wang <amwang@redhat.com>
Date: Fri Aug 10 01:24:37 2012 +0000
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>
The reason for the gfp parameter was removed in:
commit c4cdef9b7183159c23c7302aaf270d64c549f557
Author: dingtianhong <dingtianhong@huawei.com>
Date: Tue Jul 23 15:25:27 2013 +0800
bonding: don't call slave_xxx_netpoll under spinlocks
The slave_xxx_netpoll will call synchronize_rcu_bh(),
so the function may schedule and sleep, it should't be
called under spinlocks.
bond_netpoll_setup() and bond_netpoll_cleanup() are always
protected by rtnl lock, it is no need to take the read lock,
as the slave list couldn't be changed outside rtnl lock.
Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
Cc: Jay Vosburgh <fubar@us.ibm.com>
Cc: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Nothing else that calls __netpoll_setup or ndo_netpoll_setup
requires a gfp paramter, so remove the gfp parameter from both
of these functions making the code clearer.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 6 | ||||
-rw-r--r-- | drivers/net/team/team.c | 16 |
2 files changed, 10 insertions, 12 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 5be34b72a048..95a6ca7d9e51 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -922,12 +922,12 @@ static inline int slave_enable_netpoll(struct slave *slave) | |||
922 | struct netpoll *np; | 922 | struct netpoll *np; |
923 | int err = 0; | 923 | int err = 0; |
924 | 924 | ||
925 | np = kzalloc(sizeof(*np), GFP_ATOMIC); | 925 | np = kzalloc(sizeof(*np), GFP_KERNEL); |
926 | err = -ENOMEM; | 926 | err = -ENOMEM; |
927 | if (!np) | 927 | if (!np) |
928 | goto out; | 928 | goto out; |
929 | 929 | ||
930 | err = __netpoll_setup(np, slave->dev, GFP_ATOMIC); | 930 | err = __netpoll_setup(np, slave->dev); |
931 | if (err) { | 931 | if (err) { |
932 | kfree(np); | 932 | kfree(np); |
933 | goto out; | 933 | goto out; |
@@ -962,7 +962,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev) | |||
962 | slave_disable_netpoll(slave); | 962 | slave_disable_netpoll(slave); |
963 | } | 963 | } |
964 | 964 | ||
965 | static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, gfp_t gfp) | 965 | static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni) |
966 | { | 966 | { |
967 | struct bonding *bond = netdev_priv(dev); | 967 | struct bonding *bond = netdev_priv(dev); |
968 | struct list_head *iter; | 968 | struct list_head *iter; |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 2b1a1d61072c..33008c1d1d67 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1031,8 +1031,7 @@ static void team_port_leave(struct team *team, struct team_port *port) | |||
1031 | } | 1031 | } |
1032 | 1032 | ||
1033 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1033 | #ifdef CONFIG_NET_POLL_CONTROLLER |
1034 | static int team_port_enable_netpoll(struct team *team, struct team_port *port, | 1034 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) |
1035 | gfp_t gfp) | ||
1036 | { | 1035 | { |
1037 | struct netpoll *np; | 1036 | struct netpoll *np; |
1038 | int err; | 1037 | int err; |
@@ -1040,11 +1039,11 @@ static int team_port_enable_netpoll(struct team *team, struct team_port *port, | |||
1040 | if (!team->dev->npinfo) | 1039 | if (!team->dev->npinfo) |
1041 | return 0; | 1040 | return 0; |
1042 | 1041 | ||
1043 | np = kzalloc(sizeof(*np), gfp); | 1042 | np = kzalloc(sizeof(*np), GFP_KERNEL); |
1044 | if (!np) | 1043 | if (!np) |
1045 | return -ENOMEM; | 1044 | return -ENOMEM; |
1046 | 1045 | ||
1047 | err = __netpoll_setup(np, port->dev, gfp); | 1046 | err = __netpoll_setup(np, port->dev); |
1048 | if (err) { | 1047 | if (err) { |
1049 | kfree(np); | 1048 | kfree(np); |
1050 | return err; | 1049 | return err; |
@@ -1067,8 +1066,7 @@ static void team_port_disable_netpoll(struct team_port *port) | |||
1067 | kfree(np); | 1066 | kfree(np); |
1068 | } | 1067 | } |
1069 | #else | 1068 | #else |
1070 | static int team_port_enable_netpoll(struct team *team, struct team_port *port, | 1069 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) |
1071 | gfp_t gfp) | ||
1072 | { | 1070 | { |
1073 | return 0; | 1071 | return 0; |
1074 | } | 1072 | } |
@@ -1156,7 +1154,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev) | |||
1156 | goto err_vids_add; | 1154 | goto err_vids_add; |
1157 | } | 1155 | } |
1158 | 1156 | ||
1159 | err = team_port_enable_netpoll(team, port, GFP_KERNEL); | 1157 | err = team_port_enable_netpoll(team, port); |
1160 | if (err) { | 1158 | if (err) { |
1161 | netdev_err(dev, "Failed to enable netpoll on device %s\n", | 1159 | netdev_err(dev, "Failed to enable netpoll on device %s\n", |
1162 | portname); | 1160 | portname); |
@@ -1850,7 +1848,7 @@ static void team_netpoll_cleanup(struct net_device *dev) | |||
1850 | } | 1848 | } |
1851 | 1849 | ||
1852 | static int team_netpoll_setup(struct net_device *dev, | 1850 | static int team_netpoll_setup(struct net_device *dev, |
1853 | struct netpoll_info *npifo, gfp_t gfp) | 1851 | struct netpoll_info *npifo) |
1854 | { | 1852 | { |
1855 | struct team *team = netdev_priv(dev); | 1853 | struct team *team = netdev_priv(dev); |
1856 | struct team_port *port; | 1854 | struct team_port *port; |
@@ -1858,7 +1856,7 @@ static int team_netpoll_setup(struct net_device *dev, | |||
1858 | 1856 | ||
1859 | mutex_lock(&team->lock); | 1857 | mutex_lock(&team->lock); |
1860 | list_for_each_entry(port, &team->port_list, list) { | 1858 | list_for_each_entry(port, &team->port_list, list) { |
1861 | err = team_port_enable_netpoll(team, port, gfp); | 1859 | err = team_port_enable_netpoll(team, port); |
1862 | if (err) { | 1860 | if (err) { |
1863 | __team_netpoll_cleanup(team); | 1861 | __team_netpoll_cleanup(team); |
1864 | break; | 1862 | break; |