On Wed, Jul 9, 2008, Patrick McHardy wrote: > Just a few quick comments, will try to do a full review later: Thanks! >> + * Policy used for commands that operate on service, destination >> + * or daemon entries >> + */ >> +static struct nla_policy ip_vs_entries_policy[IPVS_ENTRY_ATTR_MAX + 1] >> +__read_mostly = { > > These can all be const (and have the __read_mostly annotation removed). Ok! >> +static int ip_vs_genl_fill_stats(struct sk_buff *skb, int container_type, >> + struct ip_vs_stats *stats) >> +{ >> + struct nlattr *nl_stats = nla_nest_start(skb, container_type); >> + if (!nl_stats) >> + goto nla_put_failure; > > Unbalanced locking. Whoa, right! Will correct that. >> +static int ip_vs_genl_set_cmd(struct sk_buff *skb, struct genl_info >> *info) >> +{ >> + struct ip_vs_service *svc; >> + struct ip_vs_service_user usvc; >> + struct ip_vs_dest_user udest; >> + int ret = 0, cmd, flags; >> + int need_full_svc = 0, need_full_dest = 0; >> + >> + cmd = info->genlhdr->cmd; >> + flags = info->nlhdr->nlmsg_flags; >> + >> + /* increase the module use count */ >> + ip_vs_use_count_inc(); > > This looks fishy - the reference probably must be taken by > genetlink before calling the command handler. That would seem better, but is that possible? I took this from the sockopt interface. What would you generally want to do in this situation? >> +void ip_vs_genl_unregister(void) >> +{ >> + genl_unregister_family(&ip_vs_genl_family); > > Doesn't it also has to unregister the ops? No, that happens automatically when you unregister the family. Julius -- Google Switzerland GmbH -- To unsubscribe from this list: send the line "unsubscribe lvs-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html