Commit c53ed7423619b4e8108914a9f31b426dd58ad591
Committed by
David S. Miller
1 parent
dbde497966
Exists in
master
and in
16 other branches
genetlink: only pass array to genl_register_family_with_ops()
As suggested by David Miller, make genl_register_family_with_ops() a macro and pass only the array, evaluating ARRAY_SIZE() in the macro, this is a little safer. The openvswitch has some indirection, assing ops/n_ops directly in that code. This might ultimately just assign the pointers in the family initializations, saving the struct genl_family_and_ops and code (once mcast groups are handled differently.) Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 22 changed files with 47 additions and 53 deletions Side-by-side Diff
- drivers/net/team/team.c
- drivers/net/wireless/mac80211_hwsim.c
- fs/dlm/netlink.c
- include/linux/genl_magic_func.h
- include/net/genetlink.h
- kernel/taskstats.c
- net/core/drop_monitor.c
- net/hsr/hsr_netlink.c
- net/ieee802154/netlink.c
- net/ipv4/tcp_metrics.c
- net/irda/irnetlink.c
- net/l2tp/l2tp_netlink.c
- net/netfilter/ipvs/ip_vs_ctl.c
- net/netlabel/netlabel_cipso_v4.c
- net/netlabel/netlabel_mgmt.c
- net/netlabel/netlabel_unlabeled.c
- net/netlink/genetlink.c
- net/nfc/netlink.c
- net/openvswitch/datapath.c
- net/tipc/netlink.c
- net/wimax/stack.c
- net/wireless/nl80211.c
drivers/net/team/team.c
... | ... | @@ -2699,8 +2699,7 @@ |
2699 | 2699 | { |
2700 | 2700 | int err; |
2701 | 2701 | |
2702 | - err = genl_register_family_with_ops(&team_nl_family, team_nl_ops, | |
2703 | - ARRAY_SIZE(team_nl_ops)); | |
2702 | + err = genl_register_family_with_ops(&team_nl_family, team_nl_ops); | |
2704 | 2703 | if (err) |
2705 | 2704 | return err; |
2706 | 2705 |
drivers/net/wireless/mac80211_hwsim.c
... | ... | @@ -2148,8 +2148,7 @@ |
2148 | 2148 | |
2149 | 2149 | printk(KERN_INFO "mac80211_hwsim: initializing netlink\n"); |
2150 | 2150 | |
2151 | - rc = genl_register_family_with_ops(&hwsim_genl_family, | |
2152 | - hwsim_ops, ARRAY_SIZE(hwsim_ops)); | |
2151 | + rc = genl_register_family_with_ops(&hwsim_genl_family, hwsim_ops); | |
2153 | 2152 | if (rc) |
2154 | 2153 | goto failure; |
2155 | 2154 |
fs/dlm/netlink.c
... | ... | @@ -74,14 +74,16 @@ |
74 | 74 | return 0; |
75 | 75 | } |
76 | 76 | |
77 | -static struct genl_ops dlm_nl_ops = { | |
78 | - .cmd = DLM_CMD_HELLO, | |
79 | - .doit = user_cmd, | |
77 | +static struct genl_ops dlm_nl_ops[] = { | |
78 | + { | |
79 | + .cmd = DLM_CMD_HELLO, | |
80 | + .doit = user_cmd, | |
81 | + }, | |
80 | 82 | }; |
81 | 83 | |
82 | 84 | int __init dlm_netlink_init(void) |
83 | 85 | { |
84 | - return genl_register_family_with_ops(&family, &dlm_nl_ops, 1); | |
86 | + return genl_register_family_with_ops(&family, dlm_nl_ops); | |
85 | 87 | } |
86 | 88 | |
87 | 89 | void dlm_netlink_exit(void) |
include/linux/genl_magic_func.h
... | ... | @@ -293,8 +293,7 @@ |
293 | 293 | |
294 | 294 | int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void) |
295 | 295 | { |
296 | - int err = genl_register_family_with_ops(&ZZZ_genl_family, | |
297 | - ZZZ_genl_ops, ARRAY_SIZE(ZZZ_genl_ops)); | |
296 | + int err = genl_register_family_with_ops(&ZZZ_genl_family, ZZZ_genl_ops); | |
298 | 297 | if (err) |
299 | 298 | return err; |
300 | 299 | #undef GENL_mc_group |
include/net/genetlink.h
... | ... | @@ -152,14 +152,18 @@ |
152 | 152 | * |
153 | 153 | * Return 0 on success or a negative error code. |
154 | 154 | */ |
155 | -static inline int genl_register_family_with_ops(struct genl_family *family, | |
156 | - const struct genl_ops *ops, size_t n_ops) | |
155 | +static inline int _genl_register_family_with_ops(struct genl_family *family, | |
156 | + const struct genl_ops *ops, | |
157 | + size_t n_ops) | |
157 | 158 | { |
158 | 159 | family->module = THIS_MODULE; |
159 | 160 | family->ops = ops; |
160 | 161 | family->n_ops = n_ops; |
161 | 162 | return __genl_register_family(family); |
162 | 163 | } |
164 | + | |
165 | +#define genl_register_family_with_ops(family, ops) \ | |
166 | + _genl_register_family_with_ops((family), (ops), ARRAY_SIZE(ops)) | |
163 | 167 | |
164 | 168 | int genl_unregister_family(struct genl_family *family); |
165 | 169 | int genl_register_mc_group(struct genl_family *family, |
kernel/taskstats.c
net/core/drop_monitor.c
net/hsr/hsr_netlink.c
... | ... | @@ -414,8 +414,7 @@ |
414 | 414 | if (rc) |
415 | 415 | goto fail_rtnl_link_register; |
416 | 416 | |
417 | - rc = genl_register_family_with_ops(&hsr_genl_family, hsr_ops, | |
418 | - ARRAY_SIZE(hsr_ops)); | |
417 | + rc = genl_register_family_with_ops(&hsr_genl_family, hsr_ops); | |
419 | 418 | if (rc) |
420 | 419 | goto fail_genl_register_family; |
421 | 420 |
net/ieee802154/netlink.c
net/ipv4/tcp_metrics.c
... | ... | @@ -1082,8 +1082,7 @@ |
1082 | 1082 | if (ret < 0) |
1083 | 1083 | goto cleanup; |
1084 | 1084 | ret = genl_register_family_with_ops(&tcp_metrics_nl_family, |
1085 | - tcp_metrics_nl_ops, | |
1086 | - ARRAY_SIZE(tcp_metrics_nl_ops)); | |
1085 | + tcp_metrics_nl_ops); | |
1087 | 1086 | if (ret < 0) |
1088 | 1087 | goto cleanup_subsys; |
1089 | 1088 | return; |
net/irda/irnetlink.c
... | ... | @@ -149,8 +149,7 @@ |
149 | 149 | |
150 | 150 | int irda_nl_register(void) |
151 | 151 | { |
152 | - return genl_register_family_with_ops(&irda_nl_family, | |
153 | - irda_nl_ops, ARRAY_SIZE(irda_nl_ops)); | |
152 | + return genl_register_family_with_ops(&irda_nl_family, irda_nl_ops); | |
154 | 153 | } |
155 | 154 | |
156 | 155 | void irda_nl_unregister(void) |
net/l2tp/l2tp_netlink.c
... | ... | @@ -887,13 +887,8 @@ |
887 | 887 | |
888 | 888 | static int l2tp_nl_init(void) |
889 | 889 | { |
890 | - int err; | |
891 | - | |
892 | 890 | pr_info("L2TP netlink interface\n"); |
893 | - err = genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops, | |
894 | - ARRAY_SIZE(l2tp_nl_ops)); | |
895 | - | |
896 | - return err; | |
891 | + return genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops); | |
897 | 892 | } |
898 | 893 | |
899 | 894 | static void l2tp_nl_cleanup(void) |
net/netfilter/ipvs/ip_vs_ctl.c
... | ... | @@ -3666,7 +3666,7 @@ |
3666 | 3666 | static int __init ip_vs_genl_register(void) |
3667 | 3667 | { |
3668 | 3668 | return genl_register_family_with_ops(&ip_vs_genl_family, |
3669 | - ip_vs_genl_ops, ARRAY_SIZE(ip_vs_genl_ops)); | |
3669 | + ip_vs_genl_ops); | |
3670 | 3670 | } |
3671 | 3671 | |
3672 | 3672 | static void ip_vs_genl_unregister(void) |
net/netlabel/netlabel_cipso_v4.c
net/netlabel/netlabel_mgmt.c
net/netlabel/netlabel_unlabeled.c
... | ... | @@ -1397,7 +1397,7 @@ |
1397 | 1397 | int __init netlbl_unlabel_genl_init(void) |
1398 | 1398 | { |
1399 | 1399 | return genl_register_family_with_ops(&netlbl_unlabel_gnl_family, |
1400 | - netlbl_unlabel_genl_ops, ARRAY_SIZE(netlbl_unlabel_genl_ops)); | |
1400 | + netlbl_unlabel_genl_ops); | |
1401 | 1401 | } |
1402 | 1402 | |
1403 | 1403 | /* |
net/netlink/genetlink.c
... | ... | @@ -906,11 +906,13 @@ |
906 | 906 | return 0; |
907 | 907 | } |
908 | 908 | |
909 | -static struct genl_ops genl_ctrl_ops = { | |
910 | - .cmd = CTRL_CMD_GETFAMILY, | |
911 | - .doit = ctrl_getfamily, | |
912 | - .dumpit = ctrl_dumpfamily, | |
913 | - .policy = ctrl_policy, | |
909 | +static struct genl_ops genl_ctrl_ops[] = { | |
910 | + { | |
911 | + .cmd = CTRL_CMD_GETFAMILY, | |
912 | + .doit = ctrl_getfamily, | |
913 | + .dumpit = ctrl_dumpfamily, | |
914 | + .policy = ctrl_policy, | |
915 | + }, | |
914 | 916 | }; |
915 | 917 | |
916 | 918 | static struct genl_multicast_group notify_grp = { |
... | ... | @@ -954,7 +956,7 @@ |
954 | 956 | for (i = 0; i < GENL_FAM_TAB_SIZE; i++) |
955 | 957 | INIT_LIST_HEAD(&family_ht[i]); |
956 | 958 | |
957 | - err = genl_register_family_with_ops(&genl_ctrl, &genl_ctrl_ops, 1); | |
959 | + err = genl_register_family_with_ops(&genl_ctrl, genl_ctrl_ops); | |
958 | 960 | if (err < 0) |
959 | 961 | goto problem; |
960 | 962 |
net/nfc/netlink.c
... | ... | @@ -1536,8 +1536,7 @@ |
1536 | 1536 | { |
1537 | 1537 | int rc; |
1538 | 1538 | |
1539 | - rc = genl_register_family_with_ops(&nfc_genl_family, nfc_genl_ops, | |
1540 | - ARRAY_SIZE(nfc_genl_ops)); | |
1539 | + rc = genl_register_family_with_ops(&nfc_genl_family, nfc_genl_ops); | |
1541 | 1540 | if (rc) |
1542 | 1541 | return rc; |
1543 | 1542 |
net/openvswitch/datapath.c
... | ... | @@ -1817,8 +1817,9 @@ |
1817 | 1817 | for (i = 0; i < ARRAY_SIZE(dp_genl_families); i++) { |
1818 | 1818 | const struct genl_family_and_ops *f = &dp_genl_families[i]; |
1819 | 1819 | |
1820 | - err = genl_register_family_with_ops(f->family, f->ops, | |
1821 | - f->n_ops); | |
1820 | + f->family->ops = f->ops; | |
1821 | + f->family->n_ops = f->n_ops; | |
1822 | + err = genl_register_family(f->family); | |
1822 | 1823 | if (err) |
1823 | 1824 | goto error; |
1824 | 1825 | n_registered++; |
net/tipc/netlink.c
... | ... | @@ -76,9 +76,11 @@ |
76 | 76 | .maxattr = 0, |
77 | 77 | }; |
78 | 78 | |
79 | -static struct genl_ops tipc_genl_ops = { | |
80 | - .cmd = TIPC_GENL_CMD, | |
81 | - .doit = handle_cmd, | |
79 | +static struct genl_ops tipc_genl_ops[] = { | |
80 | + { | |
81 | + .cmd = TIPC_GENL_CMD, | |
82 | + .doit = handle_cmd, | |
83 | + }, | |
82 | 84 | }; |
83 | 85 | |
84 | 86 | static int tipc_genl_family_registered; |
... | ... | @@ -87,8 +89,7 @@ |
87 | 89 | { |
88 | 90 | int res; |
89 | 91 | |
90 | - res = genl_register_family_with_ops(&tipc_genl_family, | |
91 | - &tipc_genl_ops, 1); | |
92 | + res = genl_register_family_with_ops(&tipc_genl_family, tipc_genl_ops); | |
92 | 93 | if (res) { |
93 | 94 | pr_err("Failed to register netlink interface\n"); |
94 | 95 | return res; |
net/wimax/stack.c
... | ... | @@ -597,8 +597,8 @@ |
597 | 597 | |
598 | 598 | snprintf(wimax_gnl_family.name, sizeof(wimax_gnl_family.name), |
599 | 599 | "WiMAX"); |
600 | - result = genl_register_family_with_ops(&wimax_gnl_family, wimax_gnl_ops, | |
601 | - ARRAY_SIZE(wimax_gnl_ops)); | |
600 | + result = genl_register_family_with_ops(&wimax_gnl_family, | |
601 | + wimax_gnl_ops); | |
602 | 602 | if (unlikely(result < 0)) { |
603 | 603 | printk(KERN_ERR "cannot register generic netlink family: %d\n", |
604 | 604 | result); |
net/wireless/nl80211.c
... | ... | @@ -11329,8 +11329,7 @@ |
11329 | 11329 | { |
11330 | 11330 | int err; |
11331 | 11331 | |
11332 | - err = genl_register_family_with_ops(&nl80211_fam, | |
11333 | - nl80211_ops, ARRAY_SIZE(nl80211_ops)); | |
11332 | + err = genl_register_family_with_ops(&nl80211_fam, nl80211_ops); | |
11334 | 11333 | if (err) |
11335 | 11334 | return err; |
11336 | 11335 |