@@ -225,12 +225,6 @@ static DEFINE_XARRAY_FLAGS(devlinks, XA_FLAGS_ALLOC);
225225#define ASSERT_DEVLINK_NOT_REGISTERED (d ) \
226226 WARN_ON_ONCE(xa_get_mark(&devlinks, (d)->index, DEVLINK_REGISTERED))
227227
228- /* devlink_mutex
229- *
230- * An overall lock guarding every operation coming from userspace.
231- */
232- static DEFINE_MUTEX (devlink_mutex );
233-
234228struct net * devlink_net (const struct devlink * devlink )
235229{
236230 return read_pnet (& devlink -> _net );
@@ -776,12 +770,9 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,
776770 struct devlink * devlink ;
777771 int err ;
778772
779- mutex_lock (& devlink_mutex );
780773 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 ))
783775 return PTR_ERR (devlink );
784- }
785776 devl_lock (devlink );
786777 info -> user_ptr [0 ] = devlink ;
787778 if (ops -> internal_flags & DEVLINK_NL_FLAG_NEED_PORT ) {
@@ -826,7 +817,6 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,
826817unlock :
827818 devl_unlock (devlink );
828819 devlink_put (devlink );
829- mutex_unlock (& devlink_mutex );
830820 return err ;
831821}
832822
@@ -843,7 +833,6 @@ static void devlink_nl_post_doit(const struct genl_ops *ops,
843833 }
844834 devl_unlock (devlink );
845835 devlink_put (devlink );
846- mutex_unlock (& devlink_mutex );
847836}
848837
849838static struct genl_family devlink_nl_family ;
@@ -1408,7 +1397,6 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
14081397 int idx = 0 ;
14091398 int err = 0 ;
14101399
1411- mutex_lock (& devlink_mutex );
14121400 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
14131401 devl_lock (devlink );
14141402 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,
14331421 devlink_put (devlink );
14341422 }
14351423out :
1436- mutex_unlock (& devlink_mutex );
14371424 if (err != - EMSGSIZE )
14381425 return err ;
14391426
@@ -1504,7 +1491,6 @@ static int devlink_nl_cmd_get_dumpit(struct sk_buff *msg,
15041491 int idx = 0 ;
15051492 int err ;
15061493
1507- mutex_lock (& devlink_mutex );
15081494 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
15091495 if (idx < start ) {
15101496 idx ++ ;
@@ -1521,8 +1507,6 @@ static int devlink_nl_cmd_get_dumpit(struct sk_buff *msg,
15211507 idx ++ ;
15221508 }
15231509out :
1524- mutex_unlock (& devlink_mutex );
1525-
15261510 cb -> args [0 ] = idx ;
15271511 return msg -> len ;
15281512}
@@ -1559,7 +1543,6 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
15591543 int idx = 0 ;
15601544 int err ;
15611545
1562- mutex_lock (& devlink_mutex );
15631546 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
15641547 devl_lock (devlink );
15651548 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,
15831566 devlink_put (devlink );
15841567 }
15851568out :
1586- mutex_unlock (& devlink_mutex );
1587-
15881569 cb -> args [0 ] = idx ;
15891570 return msg -> len ;
15901571}
@@ -2238,7 +2219,6 @@ static int devlink_nl_cmd_linecard_get_dumpit(struct sk_buff *msg,
22382219 int idx = 0 ;
22392220 int err ;
22402221
2241- mutex_lock (& devlink_mutex );
22422222 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
22432223 mutex_lock (& devlink -> linecards_lock );
22442224 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,
22652245 devlink_put (devlink );
22662246 }
22672247out :
2268- mutex_unlock (& devlink_mutex );
2269-
22702248 cb -> args [0 ] = idx ;
22712249 return msg -> len ;
22722250}
@@ -2503,7 +2481,6 @@ static int devlink_nl_cmd_sb_get_dumpit(struct sk_buff *msg,
25032481 int idx = 0 ;
25042482 int err ;
25052483
2506- mutex_lock (& devlink_mutex );
25072484 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
25082485 devl_lock (devlink );
25092486 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,
25272504 devlink_put (devlink );
25282505 }
25292506out :
2530- mutex_unlock (& devlink_mutex );
2531-
25322507 cb -> args [0 ] = idx ;
25332508 return msg -> len ;
25342509}
@@ -2648,7 +2623,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
26482623 int idx = 0 ;
26492624 int err = 0 ;
26502625
2651- mutex_lock (& devlink_mutex );
26522626 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
26532627 if (!devlink -> ops -> sb_pool_get )
26542628 goto retry ;
@@ -2672,8 +2646,6 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
26722646 devlink_put (devlink );
26732647 }
26742648out :
2675- mutex_unlock (& devlink_mutex );
2676-
26772649 if (err != - EMSGSIZE )
26782650 return err ;
26792651
@@ -2865,7 +2837,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
28652837 int idx = 0 ;
28662838 int err = 0 ;
28672839
2868- mutex_lock (& devlink_mutex );
28692840 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
28702841 if (!devlink -> ops -> sb_port_pool_get )
28712842 goto retry ;
@@ -2889,8 +2860,6 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
28892860 devlink_put (devlink );
28902861 }
28912862out :
2892- mutex_unlock (& devlink_mutex );
2893-
28942863 if (err != - EMSGSIZE )
28952864 return err ;
28962865
@@ -3110,7 +3079,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
31103079 int idx = 0 ;
31113080 int err = 0 ;
31123081
3113- mutex_lock (& devlink_mutex );
31143082 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
31153083 if (!devlink -> ops -> sb_tc_pool_bind_get )
31163084 goto retry ;
@@ -3135,8 +3103,6 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
31353103 devlink_put (devlink );
31363104 }
31373105out :
3138- mutex_unlock (& devlink_mutex );
3139-
31403106 if (err != - EMSGSIZE )
31413107 return err ;
31423108
@@ -4908,7 +4874,6 @@ static int devlink_nl_cmd_selftests_get_dumpit(struct sk_buff *msg,
49084874 int idx = 0 ;
49094875 int err = 0 ;
49104876
4911- mutex_lock (& devlink_mutex );
49124877 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
49134878 if (idx < start || !devlink -> ops -> selftest_check )
49144879 goto inc ;
@@ -4927,7 +4892,6 @@ static int devlink_nl_cmd_selftests_get_dumpit(struct sk_buff *msg,
49274892 idx ++ ;
49284893 devlink_put (devlink );
49294894 }
4930- mutex_unlock (& devlink_mutex );
49314895
49324896 if (err != - EMSGSIZE )
49334897 return err ;
@@ -5393,7 +5357,6 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
53935357 int idx = 0 ;
53945358 int err = 0 ;
53955359
5396- mutex_lock (& devlink_mutex );
53975360 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
53985361 devl_lock (devlink );
53995362 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,
54195382 devlink_put (devlink );
54205383 }
54215384out :
5422- mutex_unlock (& devlink_mutex );
5423-
54245385 if (err != - EMSGSIZE )
54255386 return err ;
54265387
@@ -5621,7 +5582,6 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
56215582 int idx = 0 ;
56225583 int err = 0 ;
56235584
5624- mutex_lock (& devlink_mutex );
56255585 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
56265586 devl_lock (devlink );
56275587 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,
56525612 devlink_put (devlink );
56535613 }
56545614out :
5655- mutex_unlock (& devlink_mutex );
5656-
56575615 if (err != - EMSGSIZE )
56585616 return err ;
56595617
@@ -6208,7 +6166,6 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg,
62086166 int idx = 0 ;
62096167 int err = 0 ;
62106168
6211- mutex_lock (& devlink_mutex );
62126169 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
62136170 err = devlink_nl_cmd_region_get_devlink_dumpit (msg , cb , devlink ,
62146171 & idx , start );
@@ -6217,7 +6174,6 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg,
62176174 goto out ;
62186175 }
62196176out :
6220- mutex_unlock (& devlink_mutex );
62216177 cb -> args [0 ] = idx ;
62226178 return msg -> len ;
62236179}
@@ -6483,12 +6439,9 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
64836439
64846440 start_offset = * ((u64 * )& cb -> args [0 ]);
64856441
6486- mutex_lock (& devlink_mutex );
64876442 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 );
64926445
64936446 devl_lock (devlink );
64946447
@@ -6588,17 +6541,13 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
65886541 genlmsg_end (skb , hdr );
65896542 devl_unlock (devlink );
65906543 devlink_put (devlink );
6591- mutex_unlock (& devlink_mutex );
6592-
65936544 return skb -> len ;
65946545
65956546nla_put_failure :
65966547 genlmsg_cancel (skb , hdr );
65976548out_unlock :
65986549 devl_unlock (devlink );
65996550 devlink_put (devlink );
6600- out_dev :
6601- mutex_unlock (& devlink_mutex );
66026551 return err ;
66036552}
66046553
@@ -6747,7 +6696,6 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
67476696 int idx = 0 ;
67486697 int err = 0 ;
67496698
6750- mutex_lock (& devlink_mutex );
67516699 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
67526700 if (idx < start || !devlink -> ops -> info_get )
67536701 goto inc ;
@@ -6768,7 +6716,6 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
67686716 idx ++ ;
67696717 devlink_put (devlink );
67706718 }
6771- mutex_unlock (& devlink_mutex );
67726719
67736720 if (err != - EMSGSIZE )
67746721 return err ;
@@ -7847,18 +7794,13 @@ devlink_health_reporter_get_from_cb(struct netlink_callback *cb)
78477794 struct nlattr * * attrs = info -> attrs ;
78487795 struct devlink * devlink ;
78497796
7850- mutex_lock (& devlink_mutex );
78517797 devlink = devlink_get_from_attrs (sock_net (cb -> skb -> sk ), attrs );
78527798 if (IS_ERR (devlink ))
7853- goto unlock ;
7799+ return NULL ;
78547800
78557801 reporter = devlink_health_reporter_get_from_attrs (devlink , attrs );
78567802 devlink_put (devlink );
7857- mutex_unlock (& devlink_mutex );
78587803 return reporter ;
7859- unlock :
7860- mutex_unlock (& devlink_mutex );
7861- return NULL ;
78627804}
78637805
78647806void
@@ -7924,7 +7866,6 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
79247866 int idx = 0 ;
79257867 int err ;
79267868
7927- mutex_lock (& devlink_mutex );
79287869 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
79297870 mutex_lock (& devlink -> reporters_lock );
79307871 list_for_each_entry (reporter , & devlink -> reporter_list ,
@@ -7976,8 +7917,6 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
79767917 devlink_put (devlink );
79777918 }
79787919out :
7979- mutex_unlock (& devlink_mutex );
7980-
79817920 cb -> args [0 ] = idx ;
79827921 return msg -> len ;
79837922}
@@ -8510,7 +8449,6 @@ static int devlink_nl_cmd_trap_get_dumpit(struct sk_buff *msg,
85108449 int idx = 0 ;
85118450 int err ;
85128451
8513- mutex_lock (& devlink_mutex );
85148452 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
85158453 devl_lock (devlink );
85168454 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,
85348472 devlink_put (devlink );
85358473 }
85368474out :
8537- mutex_unlock (& devlink_mutex );
8538-
85398475 cb -> args [0 ] = idx ;
85408476 return msg -> len ;
85418477}
@@ -8730,7 +8666,6 @@ static int devlink_nl_cmd_trap_group_get_dumpit(struct sk_buff *msg,
87308666 int idx = 0 ;
87318667 int err ;
87328668
8733- mutex_lock (& devlink_mutex );
87348669 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
87358670 devl_lock (devlink );
87368671 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,
87558690 devlink_put (devlink );
87568691 }
87578692out :
8758- mutex_unlock (& devlink_mutex );
8759-
87608693 cb -> args [0 ] = idx ;
87618694 return msg -> len ;
87628695}
@@ -9037,7 +8970,6 @@ static int devlink_nl_cmd_trap_policer_get_dumpit(struct sk_buff *msg,
90378970 int idx = 0 ;
90388971 int err ;
90398972
9040- mutex_lock (& devlink_mutex );
90418973 devlinks_xa_for_each_registered_get (sock_net (msg -> sk ), index , devlink ) {
90428974 devl_lock (devlink );
90438975 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,
90628994 devlink_put (devlink );
90638995 }
90648996out :
9065- mutex_unlock (& devlink_mutex );
9066-
90678997 cb -> args [0 ] = idx ;
90688998 return msg -> len ;
90698999}
@@ -12494,7 +12424,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
1249412424 /* In case network namespace is getting destroyed, reload
1249512425 * all devlink instances from this namespace into init_net.
1249612426 */
12497- mutex_lock (& devlink_mutex );
1249812427 devlinks_xa_for_each_registered_get (net , index , devlink ) {
1249912428 WARN_ON (!(devlink -> features & DEVLINK_F_RELOAD ));
1250012429 mutex_lock (& devlink -> lock );
@@ -12507,7 +12436,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
1250712436 pr_warn ("Failed to reload devlink instance into init_net\n" );
1250812437 devlink_put (devlink );
1250912438 }
12510- mutex_unlock (& devlink_mutex );
1251112439}
1251212440
1251312441static struct pernet_operations devlink_pernet_ops __net_initdata = {
0 commit comments