Skip to content

Commit d3efc2a

Browse files
Jiri Pirkodavem330
authored andcommitted
net: devlink: remove devlink_mutex
All accesses to devlink structure from userspace and drivers are locked with devlink->lock instance mutex. Also, devlinks xa_array iteration is taken care of by iteration helpers taking devlink reference. Therefore, remove devlink_mutex as it is no longer needed. Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 644a66c commit d3efc2a

File tree

1 file changed

+4
-76
lines changed

1 file changed

+4
-76
lines changed

net/core/devlink.c

Lines changed: 4 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
234228
struct 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,
826817
unlock:
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

849838
static 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
}
14351423
out:
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
}
15231509
out:
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
}
15851568
out:
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
}
22672247
out:
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
}
25292506
out:
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
}
26742648
out:
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
}
28912862
out:
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
}
31373105
out:
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
}
54215384
out:
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
}
56545614
out:
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
}
62196176
out:
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

65956546
nla_put_failure:
65966547
genlmsg_cancel(skb, hdr);
65976548
out_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

78647806
void
@@ -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
}
79787919
out:
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
}
85368474
out:
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
}
87578692
out:
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
}
90648996
out:
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

1251312441
static struct pernet_operations devlink_pernet_ops __net_initdata = {

0 commit comments

Comments
 (0)