Commit 2537af9d authored by Ying Xue's avatar Ying Xue Committed by David S. Miller

tipc: remove dev_base_lock use from enable_bearer

Convert enable_bearer() to RCU locking with dev_get_by_name().

Based on a similar changeset in commit 840a185d ["aoe: remove
dev_base_lock use from aoecmd_cfg_pkts()"] -- quoting that:

  "dev_base_lock is the legacy way to lock the device list,
   and is planned to disappear. (writers hold RTNL, readers
   hold RCU lock)"
Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 126c0524
...@@ -162,8 +162,7 @@ static void setup_bearer(struct work_struct *work) ...@@ -162,8 +162,7 @@ static void setup_bearer(struct work_struct *work)
*/ */
static int enable_bearer(struct tipc_bearer *tb_ptr) static int enable_bearer(struct tipc_bearer *tb_ptr)
{ {
struct net_device *dev = NULL; struct net_device *dev;
struct net_device *pdev = NULL;
struct eth_bearer *eb_ptr = &eth_bearers[0]; struct eth_bearer *eb_ptr = &eth_bearers[0];
struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS]; struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS];
char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1;
...@@ -178,15 +177,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) ...@@ -178,15 +177,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
} }
/* Find device with specified name */ /* Find device with specified name */
read_lock(&dev_base_lock); dev = dev_get_by_name(&init_net, driver_name);
for_each_netdev(&init_net, pdev) {
if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) {
dev = pdev;
dev_hold(dev);
break;
}
}
read_unlock(&dev_base_lock);
if (!dev) if (!dev)
return -ENODEV; return -ENODEV;
......
...@@ -155,8 +155,7 @@ static void setup_bearer(struct work_struct *work) ...@@ -155,8 +155,7 @@ static void setup_bearer(struct work_struct *work)
*/ */
static int enable_bearer(struct tipc_bearer *tb_ptr) static int enable_bearer(struct tipc_bearer *tb_ptr)
{ {
struct net_device *dev = NULL; struct net_device *dev;
struct net_device *pdev = NULL;
struct ib_bearer *ib_ptr = &ib_bearers[0]; struct ib_bearer *ib_ptr = &ib_bearers[0];
struct ib_bearer *stop = &ib_bearers[MAX_IB_BEARERS]; struct ib_bearer *stop = &ib_bearers[MAX_IB_BEARERS];
char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1;
...@@ -171,15 +170,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) ...@@ -171,15 +170,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
} }
/* Find device with specified name */ /* Find device with specified name */
read_lock(&dev_base_lock); dev = dev_get_by_name(&init_net, driver_name);
for_each_netdev(&init_net, pdev) {
if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) {
dev = pdev;
dev_hold(dev);
break;
}
}
read_unlock(&dev_base_lock);
if (!dev) if (!dev)
return -ENODEV; return -ENODEV;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment