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: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
126c052464
commit
2537af9dca
@@ -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 = ð_bearers[0];
|
struct eth_bearer *eb_ptr = ð_bearers[0];
|
||||||
struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS];
|
struct eth_bearer *stop = ð_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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user