diff options
author | Ying Xue <ying.xue@windriver.com> | 2013-06-17 10:54:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-17 18:53:01 -0400 |
commit | 2537af9dcabbdd6c93c041a955d3a9ae42c0c008 (patch) | |
tree | 5130503fa11ba0c7ec74174165ba332ed513b88a /net/tipc | |
parent | 126c0524648631a0f6fba4d016586b236209fe6f (diff) |
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>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/eth_media.c | 13 | ||||
-rw-r--r-- | net/tipc/ib_media.c | 13 |
2 files changed, 4 insertions, 22 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index c1aa37fdca2f..40ea40cf6204 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c | |||
@@ -162,8 +162,7 @@ static void setup_bearer(struct work_struct *work) | |||
162 | */ | 162 | */ |
163 | static int enable_bearer(struct tipc_bearer *tb_ptr) | 163 | static int enable_bearer(struct tipc_bearer *tb_ptr) |
164 | { | 164 | { |
165 | struct net_device *dev = NULL; | 165 | struct net_device *dev; |
166 | struct net_device *pdev = NULL; | ||
167 | struct eth_bearer *eb_ptr = ð_bearers[0]; | 166 | struct eth_bearer *eb_ptr = ð_bearers[0]; |
168 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; | 167 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; |
169 | char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; | 168 | char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; |
@@ -178,15 +177,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) | |||
178 | } | 177 | } |
179 | 178 | ||
180 | /* Find device with specified name */ | 179 | /* Find device with specified name */ |
181 | read_lock(&dev_base_lock); | 180 | dev = dev_get_by_name(&init_net, driver_name); |
182 | for_each_netdev(&init_net, pdev) { | ||
183 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { | ||
184 | dev = pdev; | ||
185 | dev_hold(dev); | ||
186 | break; | ||
187 | } | ||
188 | } | ||
189 | read_unlock(&dev_base_lock); | ||
190 | if (!dev) | 181 | if (!dev) |
191 | return -ENODEV; | 182 | return -ENODEV; |
192 | 183 | ||
diff --git a/net/tipc/ib_media.c b/net/tipc/ib_media.c index baa9df4327d9..ad2e1ec4117e 100644 --- a/net/tipc/ib_media.c +++ b/net/tipc/ib_media.c | |||
@@ -155,8 +155,7 @@ static void setup_bearer(struct work_struct *work) | |||
155 | */ | 155 | */ |
156 | static int enable_bearer(struct tipc_bearer *tb_ptr) | 156 | static int enable_bearer(struct tipc_bearer *tb_ptr) |
157 | { | 157 | { |
158 | struct net_device *dev = NULL; | 158 | struct net_device *dev; |
159 | struct net_device *pdev = NULL; | ||
160 | struct ib_bearer *ib_ptr = &ib_bearers[0]; | 159 | struct ib_bearer *ib_ptr = &ib_bearers[0]; |
161 | struct ib_bearer *stop = &ib_bearers[MAX_IB_BEARERS]; | 160 | struct ib_bearer *stop = &ib_bearers[MAX_IB_BEARERS]; |
162 | char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; | 161 | char *driver_name = strchr((const char *)tb_ptr->name, ':') + 1; |
@@ -171,15 +170,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) | |||
171 | } | 170 | } |
172 | 171 | ||
173 | /* Find device with specified name */ | 172 | /* Find device with specified name */ |
174 | read_lock(&dev_base_lock); | 173 | dev = dev_get_by_name(&init_net, driver_name); |
175 | for_each_netdev(&init_net, pdev) { | ||
176 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { | ||
177 | dev = pdev; | ||
178 | dev_hold(dev); | ||
179 | break; | ||
180 | } | ||
181 | } | ||
182 | read_unlock(&dev_base_lock); | ||
183 | if (!dev) | 174 | if (!dev) |
184 | return -ENODEV; | 175 | return -ENODEV; |
185 | 176 | ||