Commit c53ed742 authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller

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: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dbde4979
...@@ -2699,8 +2699,7 @@ static int team_nl_init(void) ...@@ -2699,8 +2699,7 @@ static int team_nl_init(void)
{ {
int err; int err;
err = genl_register_family_with_ops(&team_nl_family, team_nl_ops, err = genl_register_family_with_ops(&team_nl_family, team_nl_ops);
ARRAY_SIZE(team_nl_ops));
if (err) if (err)
return err; return err;
......
...@@ -2148,8 +2148,7 @@ static int hwsim_init_netlink(void) ...@@ -2148,8 +2148,7 @@ static int hwsim_init_netlink(void)
printk(KERN_INFO "mac80211_hwsim: initializing netlink\n"); printk(KERN_INFO "mac80211_hwsim: initializing netlink\n");
rc = genl_register_family_with_ops(&hwsim_genl_family, rc = genl_register_family_with_ops(&hwsim_genl_family, hwsim_ops);
hwsim_ops, ARRAY_SIZE(hwsim_ops));
if (rc) if (rc)
goto failure; goto failure;
......
...@@ -74,14 +74,16 @@ static int user_cmd(struct sk_buff *skb, struct genl_info *info) ...@@ -74,14 +74,16 @@ static int user_cmd(struct sk_buff *skb, struct genl_info *info)
return 0; return 0;
} }
static struct genl_ops dlm_nl_ops = { static struct genl_ops dlm_nl_ops[] = {
.cmd = DLM_CMD_HELLO, {
.doit = user_cmd, .cmd = DLM_CMD_HELLO,
.doit = user_cmd,
},
}; };
int __init dlm_netlink_init(void) int __init dlm_netlink_init(void)
{ {
return genl_register_family_with_ops(&family, &dlm_nl_ops, 1); return genl_register_family_with_ops(&family, dlm_nl_ops);
} }
void dlm_netlink_exit(void) void dlm_netlink_exit(void)
......
...@@ -293,8 +293,7 @@ static int CONCAT_(GENL_MAGIC_FAMILY, _genl_multicast_ ## group)( \ ...@@ -293,8 +293,7 @@ static int CONCAT_(GENL_MAGIC_FAMILY, _genl_multicast_ ## group)( \
int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void) int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void)
{ {
int err = genl_register_family_with_ops(&ZZZ_genl_family, int err = genl_register_family_with_ops(&ZZZ_genl_family, ZZZ_genl_ops);
ZZZ_genl_ops, ARRAY_SIZE(ZZZ_genl_ops));
if (err) if (err)
return err; return err;
#undef GENL_mc_group #undef GENL_mc_group
......
...@@ -152,8 +152,9 @@ static inline int genl_register_family(struct genl_family *family) ...@@ -152,8 +152,9 @@ static inline int genl_register_family(struct genl_family *family)
* *
* Return 0 on success or a negative error code. * Return 0 on success or a negative error code.
*/ */
static inline int genl_register_family_with_ops(struct genl_family *family, static inline int _genl_register_family_with_ops(struct genl_family *family,
const struct genl_ops *ops, size_t n_ops) const struct genl_ops *ops,
size_t n_ops)
{ {
family->module = THIS_MODULE; family->module = THIS_MODULE;
family->ops = ops; family->ops = ops;
...@@ -161,6 +162,9 @@ static inline int genl_register_family_with_ops(struct genl_family *family, ...@@ -161,6 +162,9 @@ static inline int genl_register_family_with_ops(struct genl_family *family,
return __genl_register_family(family); return __genl_register_family(family);
} }
#define genl_register_family_with_ops(family, ops) \
_genl_register_family_with_ops((family), (ops), ARRAY_SIZE(ops))
int genl_unregister_family(struct genl_family *family); int genl_unregister_family(struct genl_family *family);
int genl_register_mc_group(struct genl_family *family, int genl_register_mc_group(struct genl_family *family,
struct genl_multicast_group *grp); struct genl_multicast_group *grp);
......
...@@ -703,8 +703,7 @@ static int __init taskstats_init(void) ...@@ -703,8 +703,7 @@ static int __init taskstats_init(void)
{ {
int rc; int rc;
rc = genl_register_family_with_ops(&family, taskstats_ops, rc = genl_register_family_with_ops(&family, taskstats_ops);
ARRAY_SIZE(taskstats_ops));
if (rc) if (rc)
return rc; return rc;
......
...@@ -365,8 +365,7 @@ static int __init init_net_drop_monitor(void) ...@@ -365,8 +365,7 @@ static int __init init_net_drop_monitor(void)
} }
rc = genl_register_family_with_ops(&net_drop_monitor_family, rc = genl_register_family_with_ops(&net_drop_monitor_family,
dropmon_ops, dropmon_ops);
ARRAY_SIZE(dropmon_ops));
if (rc) { if (rc) {
pr_err("Could not create drop monitor netlink family\n"); pr_err("Could not create drop monitor netlink family\n");
return rc; return rc;
......
...@@ -414,8 +414,7 @@ int __init hsr_netlink_init(void) ...@@ -414,8 +414,7 @@ int __init hsr_netlink_init(void)
if (rc) if (rc)
goto fail_rtnl_link_register; goto fail_rtnl_link_register;
rc = genl_register_family_with_ops(&hsr_genl_family, hsr_ops, rc = genl_register_family_with_ops(&hsr_genl_family, hsr_ops);
ARRAY_SIZE(hsr_ops));
if (rc) if (rc)
goto fail_genl_register_family; goto fail_genl_register_family;
......
...@@ -129,8 +129,7 @@ int __init ieee802154_nl_init(void) ...@@ -129,8 +129,7 @@ int __init ieee802154_nl_init(void)
{ {
int rc; int rc;
rc = genl_register_family_with_ops(&nl802154_family, ieee8021154_ops, rc = genl_register_family_with_ops(&nl802154_family, ieee8021154_ops);
ARRAY_SIZE(ieee8021154_ops));
if (rc) if (rc)
return rc; return rc;
......
...@@ -1082,8 +1082,7 @@ void __init tcp_metrics_init(void) ...@@ -1082,8 +1082,7 @@ void __init tcp_metrics_init(void)
if (ret < 0) if (ret < 0)
goto cleanup; goto cleanup;
ret = genl_register_family_with_ops(&tcp_metrics_nl_family, ret = genl_register_family_with_ops(&tcp_metrics_nl_family,
tcp_metrics_nl_ops, tcp_metrics_nl_ops);
ARRAY_SIZE(tcp_metrics_nl_ops));
if (ret < 0) if (ret < 0)
goto cleanup_subsys; goto cleanup_subsys;
return; return;
......
...@@ -149,8 +149,7 @@ static const struct genl_ops irda_nl_ops[] = { ...@@ -149,8 +149,7 @@ static const struct genl_ops irda_nl_ops[] = {
int irda_nl_register(void) int irda_nl_register(void)
{ {
return genl_register_family_with_ops(&irda_nl_family, return genl_register_family_with_ops(&irda_nl_family, irda_nl_ops);
irda_nl_ops, ARRAY_SIZE(irda_nl_ops));
} }
void irda_nl_unregister(void) void irda_nl_unregister(void)
......
...@@ -887,13 +887,8 @@ EXPORT_SYMBOL_GPL(l2tp_nl_unregister_ops); ...@@ -887,13 +887,8 @@ EXPORT_SYMBOL_GPL(l2tp_nl_unregister_ops);
static int l2tp_nl_init(void) static int l2tp_nl_init(void)
{ {
int err;
pr_info("L2TP netlink interface\n"); pr_info("L2TP netlink interface\n");
err = genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops, return genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops);
ARRAY_SIZE(l2tp_nl_ops));
return err;
} }
static void l2tp_nl_cleanup(void) static void l2tp_nl_cleanup(void)
......
...@@ -3666,7 +3666,7 @@ static const struct genl_ops ip_vs_genl_ops[] __read_mostly = { ...@@ -3666,7 +3666,7 @@ static const struct genl_ops ip_vs_genl_ops[] __read_mostly = {
static int __init ip_vs_genl_register(void) static int __init ip_vs_genl_register(void)
{ {
return genl_register_family_with_ops(&ip_vs_genl_family, return genl_register_family_with_ops(&ip_vs_genl_family,
ip_vs_genl_ops, ARRAY_SIZE(ip_vs_genl_ops)); ip_vs_genl_ops);
} }
static void ip_vs_genl_unregister(void) static void ip_vs_genl_unregister(void)
......
...@@ -783,5 +783,5 @@ static const struct genl_ops netlbl_cipsov4_ops[] = { ...@@ -783,5 +783,5 @@ static const struct genl_ops netlbl_cipsov4_ops[] = {
int __init netlbl_cipsov4_genl_init(void) int __init netlbl_cipsov4_genl_init(void)
{ {
return genl_register_family_with_ops(&netlbl_cipsov4_gnl_family, return genl_register_family_with_ops(&netlbl_cipsov4_gnl_family,
netlbl_cipsov4_ops, ARRAY_SIZE(netlbl_cipsov4_ops)); netlbl_cipsov4_ops);
} }
...@@ -779,5 +779,5 @@ static const struct genl_ops netlbl_mgmt_genl_ops[] = { ...@@ -779,5 +779,5 @@ static const struct genl_ops netlbl_mgmt_genl_ops[] = {
int __init netlbl_mgmt_genl_init(void) int __init netlbl_mgmt_genl_init(void)
{ {
return genl_register_family_with_ops(&netlbl_mgmt_gnl_family, return genl_register_family_with_ops(&netlbl_mgmt_gnl_family,
netlbl_mgmt_genl_ops, ARRAY_SIZE(netlbl_mgmt_genl_ops)); netlbl_mgmt_genl_ops);
} }
...@@ -1397,7 +1397,7 @@ static const struct genl_ops netlbl_unlabel_genl_ops[] = { ...@@ -1397,7 +1397,7 @@ static const struct genl_ops netlbl_unlabel_genl_ops[] = {
int __init netlbl_unlabel_genl_init(void) int __init netlbl_unlabel_genl_init(void)
{ {
return genl_register_family_with_ops(&netlbl_unlabel_gnl_family, return genl_register_family_with_ops(&netlbl_unlabel_gnl_family,
netlbl_unlabel_genl_ops, ARRAY_SIZE(netlbl_unlabel_genl_ops)); netlbl_unlabel_genl_ops);
} }
/* /*
......
...@@ -906,11 +906,13 @@ static int genl_ctrl_event(int event, void *data) ...@@ -906,11 +906,13 @@ static int genl_ctrl_event(int event, void *data)
return 0; return 0;
} }
static struct genl_ops genl_ctrl_ops = { static struct genl_ops genl_ctrl_ops[] = {
.cmd = CTRL_CMD_GETFAMILY, {
.doit = ctrl_getfamily, .cmd = CTRL_CMD_GETFAMILY,
.dumpit = ctrl_dumpfamily, .doit = ctrl_getfamily,
.policy = ctrl_policy, .dumpit = ctrl_dumpfamily,
.policy = ctrl_policy,
},
}; };
static struct genl_multicast_group notify_grp = { static struct genl_multicast_group notify_grp = {
...@@ -954,7 +956,7 @@ static int __init genl_init(void) ...@@ -954,7 +956,7 @@ static int __init genl_init(void)
for (i = 0; i < GENL_FAM_TAB_SIZE; i++) for (i = 0; i < GENL_FAM_TAB_SIZE; i++)
INIT_LIST_HEAD(&family_ht[i]); INIT_LIST_HEAD(&family_ht[i]);
err = genl_register_family_with_ops(&genl_ctrl, &genl_ctrl_ops, 1); err = genl_register_family_with_ops(&genl_ctrl, genl_ctrl_ops);
if (err < 0) if (err < 0)
goto problem; goto problem;
......
...@@ -1536,8 +1536,7 @@ int __init nfc_genl_init(void) ...@@ -1536,8 +1536,7 @@ int __init nfc_genl_init(void)
{ {
int rc; int rc;
rc = genl_register_family_with_ops(&nfc_genl_family, nfc_genl_ops, rc = genl_register_family_with_ops(&nfc_genl_family, nfc_genl_ops);
ARRAY_SIZE(nfc_genl_ops));
if (rc) if (rc)
return rc; return rc;
......
...@@ -1817,8 +1817,9 @@ static int dp_register_genl(void) ...@@ -1817,8 +1817,9 @@ static int dp_register_genl(void)
for (i = 0; i < ARRAY_SIZE(dp_genl_families); i++) { for (i = 0; i < ARRAY_SIZE(dp_genl_families); i++) {
const struct genl_family_and_ops *f = &dp_genl_families[i]; const struct genl_family_and_ops *f = &dp_genl_families[i];
err = genl_register_family_with_ops(f->family, f->ops, f->family->ops = f->ops;
f->n_ops); f->family->n_ops = f->n_ops;
err = genl_register_family(f->family);
if (err) if (err)
goto error; goto error;
n_registered++; n_registered++;
......
...@@ -76,9 +76,11 @@ static struct genl_family tipc_genl_family = { ...@@ -76,9 +76,11 @@ static struct genl_family tipc_genl_family = {
.maxattr = 0, .maxattr = 0,
}; };
static struct genl_ops tipc_genl_ops = { static struct genl_ops tipc_genl_ops[] = {
.cmd = TIPC_GENL_CMD, {
.doit = handle_cmd, .cmd = TIPC_GENL_CMD,
.doit = handle_cmd,
},
}; };
static int tipc_genl_family_registered; static int tipc_genl_family_registered;
...@@ -87,8 +89,7 @@ int tipc_netlink_start(void) ...@@ -87,8 +89,7 @@ int tipc_netlink_start(void)
{ {
int res; int res;
res = genl_register_family_with_ops(&tipc_genl_family, res = genl_register_family_with_ops(&tipc_genl_family, tipc_genl_ops);
&tipc_genl_ops, 1);
if (res) { if (res) {
pr_err("Failed to register netlink interface\n"); pr_err("Failed to register netlink interface\n");
return res; return res;
......
...@@ -597,8 +597,8 @@ int __init wimax_subsys_init(void) ...@@ -597,8 +597,8 @@ int __init wimax_subsys_init(void)
snprintf(wimax_gnl_family.name, sizeof(wimax_gnl_family.name), snprintf(wimax_gnl_family.name, sizeof(wimax_gnl_family.name),
"WiMAX"); "WiMAX");
result = genl_register_family_with_ops(&wimax_gnl_family, wimax_gnl_ops, result = genl_register_family_with_ops(&wimax_gnl_family,
ARRAY_SIZE(wimax_gnl_ops)); wimax_gnl_ops);
if (unlikely(result < 0)) { if (unlikely(result < 0)) {
printk(KERN_ERR "cannot register generic netlink family: %d\n", printk(KERN_ERR "cannot register generic netlink family: %d\n",
result); result);
......
...@@ -11329,8 +11329,7 @@ int nl80211_init(void) ...@@ -11329,8 +11329,7 @@ int nl80211_init(void)
{ {
int err; int err;
err = genl_register_family_with_ops(&nl80211_fam, err = genl_register_family_with_ops(&nl80211_fam, nl80211_ops);
nl80211_ops, ARRAY_SIZE(nl80211_ops));
if (err) if (err)
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment