diff options
author | Alexander Aring <alex.aring@gmail.com> | 2015-05-17 15:45:04 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-05-19 05:44:46 -0400 |
commit | 6fa2cffe8cf937fc10be362a2dcac8a5965f618e (patch) | |
tree | dcd4bbfad53a414cc1a2ae8cb2bd8ef973b9441e /drivers/net | |
parent | b82b99f16bc207291b14228441cfffbfd23d5f49 (diff) |
fakelb: move lock out of iteration
The list need to be protected while iteration which is need when other
list iterates at the same time over this list.
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ieee802154/fakelb.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/ieee802154/fakelb.c b/drivers/net/ieee802154/fakelb.c index c7e7d506224f..e1c0195c18aa 100644 --- a/drivers/net/ieee802154/fakelb.c +++ b/drivers/net/ieee802154/fakelb.c | |||
@@ -193,9 +193,7 @@ err_reg: | |||
193 | 193 | ||
194 | static void fakelb_del(struct fakelb_phy *phy) | 194 | static void fakelb_del(struct fakelb_phy *phy) |
195 | { | 195 | { |
196 | write_lock_bh(&fakelb_lock); | ||
197 | list_del(&phy->list); | 196 | list_del(&phy->list); |
198 | write_unlock_bh(&fakelb_lock); | ||
199 | 197 | ||
200 | ieee802154_unregister_hw(phy->hw); | 198 | ieee802154_unregister_hw(phy->hw); |
201 | ieee802154_free_hw(phy->hw); | 199 | ieee802154_free_hw(phy->hw); |
@@ -217,8 +215,10 @@ static int fakelb_probe(struct platform_device *pdev) | |||
217 | return 0; | 215 | return 0; |
218 | 216 | ||
219 | err_slave: | 217 | err_slave: |
218 | write_lock_bh(&fakelb_lock); | ||
220 | list_for_each_entry_safe(phy, tmp, &fakelb_phys, list) | 219 | list_for_each_entry_safe(phy, tmp, &fakelb_phys, list) |
221 | fakelb_del(phy); | 220 | fakelb_del(phy); |
221 | write_unlock_bh(&fakelb_lock); | ||
222 | return err; | 222 | return err; |
223 | } | 223 | } |
224 | 224 | ||
@@ -226,9 +226,10 @@ static int fakelb_remove(struct platform_device *pdev) | |||
226 | { | 226 | { |
227 | struct fakelb_phy *phy, *temp; | 227 | struct fakelb_phy *phy, *temp; |
228 | 228 | ||
229 | write_lock_bh(&fakelb_lock); | ||
229 | list_for_each_entry_safe(phy, temp, &fakelb_phys, list) | 230 | list_for_each_entry_safe(phy, temp, &fakelb_phys, list) |
230 | fakelb_del(phy); | 231 | fakelb_del(phy); |
231 | 232 | write_unlock_bh(&fakelb_lock); | |
232 | return 0; | 233 | return 0; |
233 | } | 234 | } |
234 | 235 | ||