@@ -225,12 +225,6 @@ static DEFINE_XARRAY_FLAGS(devlinks, XA_FLAGS_ALLOC);
225
225
#define ASSERT_DEVLINK_NOT_REGISTERED (d ) \
226
226
WARN_ON_ONCE(xa_get_mark(&devlinks, (d)->index, DEVLINK_REGISTERED))
227
227
228
- /* devlink_mutex
229
- *
230
- * An overall lock guarding every operation coming from userspace.
231
- */
232
- static DEFINE_MUTEX (devlink_mutex );
233
-
234
228
struct net * devlink_net (const struct devlink * devlink )
235
229
{
236
230
return read_pnet (& devlink -> _net );
@@ -776,12 +770,9 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,
776
770
struct devlink * devlink ;
777
771
int err ;
778
772
779
- mutex_lock (& devlink_mutex );
780
773
devlink = devlink_get_from_attrs (genl_info_net (info ), info -> attrs );
781
- if (IS_ERR (devlink )) {
782
- mutex_unlock (& devlink_mutex );
774
+ if (IS_ERR (devlink ))
783
775
return PTR_ERR (devlink );
784
- }
785
776
devl_lock (devlink );
786
777
info -> user_ptr [0 ] = devlink ;
787
778
if (ops -> internal_flags & DEVLINK_NL_FLAG_NEED_PORT ) {
@@ -826,7 +817,6 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,
826
817
unlock :
827
818
devl_unlock (devlink );
828
819
devlink_put (devlink );
829
- mutex_unlock (& devlink_mutex );
830
820
return err ;
831
821
}
832
822
@@ -843,7 +833,6 @@ static void devlink_nl_post_doit(const struct genl_ops *ops,
843
833
}
844
834
devl_unlock (devlink );
845
835
devlink_put (devlink );
846
- mutex_unlock (& devlink_mutex );
847
836
}
848
837
849
838
static struct genl_family devlink_nl_family ;
@@ -1408,7 +1397,6 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
1408
1397
int idx = 0 ;
1409
1398
int err = 0 ;
1410
1399
1411
- mutex_lock (& devlink_mutex );
1412
1400
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
1413
1401
devl_lock (devlink );
1414
1402
list_for_each_entry (devlink_rate , & devlink -> rate_list , list ) {
@@ -1433,7 +1421,6 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
1433
1421
devlink_put (devlink );
1434
1422
}
1435
1423
out :
1436
- mutex_unlock (& devlink_mutex );
1437
1424
if (err != - EMSGSIZE )
1438
1425
return err ;
1439
1426
@@ -1504,7 +1491,6 @@ static int devlink_nl_cmd_get_dumpit(struct sk_buff *msg,
1504
1491
int idx = 0 ;
1505
1492
int err ;
1506
1493
1507
- mutex_lock (& devlink_mutex );
1508
1494
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
1509
1495
if (idx < start ) {
1510
1496
idx ++ ;
@@ -1521,8 +1507,6 @@ static int devlink_nl_cmd_get_dumpit(struct sk_buff *msg,
1521
1507
idx ++ ;
1522
1508
}
1523
1509
out :
1524
- mutex_unlock (& devlink_mutex );
1525
-
1526
1510
cb -> args [0 ] = idx ;
1527
1511
return msg -> len ;
1528
1512
}
@@ -1559,7 +1543,6 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
1559
1543
int idx = 0 ;
1560
1544
int err ;
1561
1545
1562
- mutex_lock (& devlink_mutex );
1563
1546
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
1564
1547
devl_lock (devlink );
1565
1548
list_for_each_entry (devlink_port , & devlink -> port_list , list ) {
@@ -1583,8 +1566,6 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
1583
1566
devlink_put (devlink );
1584
1567
}
1585
1568
out :
1586
- mutex_unlock (& devlink_mutex );
1587
-
1588
1569
cb -> args [0 ] = idx ;
1589
1570
return msg -> len ;
1590
1571
}
@@ -2238,7 +2219,6 @@ static int devlink_nl_cmd_linecard_get_dumpit(struct sk_buff *msg,
2238
2219
int idx = 0 ;
2239
2220
int err ;
2240
2221
2241
- mutex_lock (& devlink_mutex );
2242
2222
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
2243
2223
mutex_lock (& devlink -> linecards_lock );
2244
2224
list_for_each_entry (linecard , & devlink -> linecard_list , list ) {
@@ -2265,8 +2245,6 @@ static int devlink_nl_cmd_linecard_get_dumpit(struct sk_buff *msg,
2265
2245
devlink_put (devlink );
2266
2246
}
2267
2247
out :
2268
- mutex_unlock (& devlink_mutex );
2269
-
2270
2248
cb -> args [0 ] = idx ;
2271
2249
return msg -> len ;
2272
2250
}
@@ -2503,7 +2481,6 @@ static int devlink_nl_cmd_sb_get_dumpit(struct sk_buff *msg,
2503
2481
int idx = 0 ;
2504
2482
int err ;
2505
2483
2506
- mutex_lock (& devlink_mutex );
2507
2484
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
2508
2485
devl_lock (devlink );
2509
2486
list_for_each_entry (devlink_sb , & devlink -> sb_list , list ) {
@@ -2527,8 +2504,6 @@ static int devlink_nl_cmd_sb_get_dumpit(struct sk_buff *msg,
2527
2504
devlink_put (devlink );
2528
2505
}
2529
2506
out :
2530
- mutex_unlock (& devlink_mutex );
2531
-
2532
2507
cb -> args [0 ] = idx ;
2533
2508
return msg -> len ;
2534
2509
}
@@ -2648,7 +2623,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
2648
2623
int idx = 0 ;
2649
2624
int err = 0 ;
2650
2625
2651
- mutex_lock (& devlink_mutex );
2652
2626
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
2653
2627
if (!devlink -> ops -> sb_pool_get )
2654
2628
goto retry ;
@@ -2672,8 +2646,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
2672
2646
devlink_put (devlink );
2673
2647
}
2674
2648
out :
2675
- mutex_unlock (& devlink_mutex );
2676
-
2677
2649
if (err != - EMSGSIZE )
2678
2650
return err ;
2679
2651
@@ -2865,7 +2837,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
2865
2837
int idx = 0 ;
2866
2838
int err = 0 ;
2867
2839
2868
- mutex_lock (& devlink_mutex );
2869
2840
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
2870
2841
if (!devlink -> ops -> sb_port_pool_get )
2871
2842
goto retry ;
@@ -2889,8 +2860,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
2889
2860
devlink_put (devlink );
2890
2861
}
2891
2862
out :
2892
- mutex_unlock (& devlink_mutex );
2893
-
2894
2863
if (err != - EMSGSIZE )
2895
2864
return err ;
2896
2865
@@ -3110,7 +3079,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
3110
3079
int idx = 0 ;
3111
3080
int err = 0 ;
3112
3081
3113
- mutex_lock (& devlink_mutex );
3114
3082
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
3115
3083
if (!devlink -> ops -> sb_tc_pool_bind_get )
3116
3084
goto retry ;
@@ -3135,8 +3103,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
3135
3103
devlink_put (devlink );
3136
3104
}
3137
3105
out :
3138
- mutex_unlock (& devlink_mutex );
3139
-
3140
3106
if (err != - EMSGSIZE )
3141
3107
return err ;
3142
3108
@@ -4908,7 +4874,6 @@ static int devlink_nl_cmd_selftests_get_dumpit(struct sk_buff *msg,
4908
4874
int idx = 0 ;
4909
4875
int err = 0 ;
4910
4876
4911
- mutex_lock (& devlink_mutex );
4912
4877
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
4913
4878
if (idx < start || !devlink -> ops -> selftest_check )
4914
4879
goto inc ;
@@ -4927,7 +4892,6 @@ static int devlink_nl_cmd_selftests_get_dumpit(struct sk_buff *msg,
4927
4892
idx ++ ;
4928
4893
devlink_put (devlink );
4929
4894
}
4930
- mutex_unlock (& devlink_mutex );
4931
4895
4932
4896
if (err != - EMSGSIZE )
4933
4897
return err ;
@@ -5393,7 +5357,6 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
5393
5357
int idx = 0 ;
5394
5358
int err = 0 ;
5395
5359
5396
- mutex_lock (& devlink_mutex );
5397
5360
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
5398
5361
devl_lock (devlink );
5399
5362
list_for_each_entry (param_item , & devlink -> param_list , list ) {
@@ -5419,8 +5382,6 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
5419
5382
devlink_put (devlink );
5420
5383
}
5421
5384
out :
5422
- mutex_unlock (& devlink_mutex );
5423
-
5424
5385
if (err != - EMSGSIZE )
5425
5386
return err ;
5426
5387
@@ -5621,7 +5582,6 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
5621
5582
int idx = 0 ;
5622
5583
int err = 0 ;
5623
5584
5624
- mutex_lock (& devlink_mutex );
5625
5585
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
5626
5586
devl_lock (devlink );
5627
5587
list_for_each_entry (devlink_port , & devlink -> port_list , list ) {
@@ -5652,8 +5612,6 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
5652
5612
devlink_put (devlink );
5653
5613
}
5654
5614
out :
5655
- mutex_unlock (& devlink_mutex );
5656
-
5657
5615
if (err != - EMSGSIZE )
5658
5616
return err ;
5659
5617
@@ -6208,7 +6166,6 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg,
6208
6166
int idx = 0 ;
6209
6167
int err = 0 ;
6210
6168
6211
- mutex_lock (& devlink_mutex );
6212
6169
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
6213
6170
err = devlink_nl_cmd_region_get_devlink_dumpit (msg , cb , devlink ,
6214
6171
& idx , start );
@@ -6217,7 +6174,6 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg,
6217
6174
goto out ;
6218
6175
}
6219
6176
out :
6220
- mutex_unlock (& devlink_mutex );
6221
6177
cb -> args [0 ] = idx ;
6222
6178
return msg -> len ;
6223
6179
}
@@ -6483,12 +6439,9 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
6483
6439
6484
6440
start_offset = * ((u64 * )& cb -> args [0 ]);
6485
6441
6486
- mutex_lock (& devlink_mutex );
6487
6442
devlink = devlink_get_from_attrs (sock_net (cb -> skb -> sk ), attrs );
6488
- if (IS_ERR (devlink )) {
6489
- err = PTR_ERR (devlink );
6490
- goto out_dev ;
6491
- }
6443
+ if (IS_ERR (devlink ))
6444
+ return PTR_ERR (devlink );
6492
6445
6493
6446
devl_lock (devlink );
6494
6447
@@ -6588,17 +6541,13 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
6588
6541
genlmsg_end (skb , hdr );
6589
6542
devl_unlock (devlink );
6590
6543
devlink_put (devlink );
6591
- mutex_unlock (& devlink_mutex );
6592
-
6593
6544
return skb -> len ;
6594
6545
6595
6546
nla_put_failure :
6596
6547
genlmsg_cancel (skb , hdr );
6597
6548
out_unlock :
6598
6549
devl_unlock (devlink );
6599
6550
devlink_put (devlink );
6600
- out_dev :
6601
- mutex_unlock (& devlink_mutex );
6602
6551
return err ;
6603
6552
}
6604
6553
@@ -6747,7 +6696,6 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
6747
6696
int idx = 0 ;
6748
6697
int err = 0 ;
6749
6698
6750
- mutex_lock (& devlink_mutex );
6751
6699
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
6752
6700
if (idx < start || !devlink -> ops -> info_get )
6753
6701
goto inc ;
@@ -6768,7 +6716,6 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
6768
6716
idx ++ ;
6769
6717
devlink_put (devlink );
6770
6718
}
6771
- mutex_unlock (& devlink_mutex );
6772
6719
6773
6720
if (err != - EMSGSIZE )
6774
6721
return err ;
@@ -7847,18 +7794,13 @@ devlink_health_reporter_get_from_cb(struct netlink_callback *cb)
7847
7794
struct nlattr * * attrs = info -> attrs ;
7848
7795
struct devlink * devlink ;
7849
7796
7850
- mutex_lock (& devlink_mutex );
7851
7797
devlink = devlink_get_from_attrs (sock_net (cb -> skb -> sk ), attrs );
7852
7798
if (IS_ERR (devlink ))
7853
- goto unlock ;
7799
+ return NULL ;
7854
7800
7855
7801
reporter = devlink_health_reporter_get_from_attrs (devlink , attrs );
7856
7802
devlink_put (devlink );
7857
- mutex_unlock (& devlink_mutex );
7858
7803
return reporter ;
7859
- unlock :
7860
- mutex_unlock (& devlink_mutex );
7861
- return NULL ;
7862
7804
}
7863
7805
7864
7806
void
@@ -7924,7 +7866,6 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
7924
7866
int idx = 0 ;
7925
7867
int err ;
7926
7868
7927
- mutex_lock (& devlink_mutex );
7928
7869
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
7929
7870
mutex_lock (& devlink -> reporters_lock );
7930
7871
list_for_each_entry (reporter , & devlink -> reporter_list ,
@@ -7976,8 +7917,6 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
7976
7917
devlink_put (devlink );
7977
7918
}
7978
7919
out :
7979
- mutex_unlock (& devlink_mutex );
7980
-
7981
7920
cb -> args [0 ] = idx ;
7982
7921
return msg -> len ;
7983
7922
}
@@ -8510,7 +8449,6 @@ static int devlink_nl_cmd_trap_get_dumpit(struct sk_buff *msg,
8510
8449
int idx = 0 ;
8511
8450
int err ;
8512
8451
8513
- mutex_lock (& devlink_mutex );
8514
8452
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
8515
8453
devl_lock (devlink );
8516
8454
list_for_each_entry (trap_item , & devlink -> trap_list , list ) {
@@ -8534,8 +8472,6 @@ static int devlink_nl_cmd_trap_get_dumpit(struct sk_buff *msg,
8534
8472
devlink_put (devlink );
8535
8473
}
8536
8474
out :
8537
- mutex_unlock (& devlink_mutex );
8538
-
8539
8475
cb -> args [0 ] = idx ;
8540
8476
return msg -> len ;
8541
8477
}
@@ -8730,7 +8666,6 @@ static int devlink_nl_cmd_trap_group_get_dumpit(struct sk_buff *msg,
8730
8666
int idx = 0 ;
8731
8667
int err ;
8732
8668
8733
- mutex_lock (& devlink_mutex );
8734
8669
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
8735
8670
devl_lock (devlink );
8736
8671
list_for_each_entry (group_item , & devlink -> trap_group_list ,
@@ -8755,8 +8690,6 @@ static int devlink_nl_cmd_trap_group_get_dumpit(struct sk_buff *msg,
8755
8690
devlink_put (devlink );
8756
8691
}
8757
8692
out :
8758
- mutex_unlock (& devlink_mutex );
8759
-
8760
8693
cb -> args [0 ] = idx ;
8761
8694
return msg -> len ;
8762
8695
}
@@ -9037,7 +8970,6 @@ static int devlink_nl_cmd_trap_policer_get_dumpit(struct sk_buff *msg,
9037
8970
int idx = 0 ;
9038
8971
int err ;
9039
8972
9040
- mutex_lock (& devlink_mutex );
9041
8973
devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
9042
8974
devl_lock (devlink );
9043
8975
list_for_each_entry (policer_item , & devlink -> trap_policer_list ,
@@ -9062,8 +8994,6 @@ static int devlink_nl_cmd_trap_policer_get_dumpit(struct sk_buff *msg,
9062
8994
devlink_put (devlink );
9063
8995
}
9064
8996
out :
9065
- mutex_unlock (& devlink_mutex );
9066
-
9067
8997
cb -> args [0 ] = idx ;
9068
8998
return msg -> len ;
9069
8999
}
@@ -12494,7 +12424,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
12494
12424
/* In case network namespace is getting destroyed, reload
12495
12425
* all devlink instances from this namespace into init_net.
12496
12426
*/
12497
- mutex_lock (& devlink_mutex );
12498
12427
devlinks_xa_for_each_registered_get (net , index , devlink ) {
12499
12428
WARN_ON (!(devlink -> features & DEVLINK_F_RELOAD ));
12500
12429
mutex_lock (& devlink -> lock );
@@ -12507,7 +12436,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
12507
12436
pr_warn ("Failed to reload devlink instance into init_net\n" );
12508
12437
devlink_put (devlink );
12509
12438
}
12510
- mutex_unlock (& devlink_mutex );
12511
12439
}
12512
12440
12513
12441
static struct pernet_operations devlink_pernet_ops __net_initdata = {
0 commit comments