]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - net/netlink/genetlink.c
Merge branch 'pm-tools'
[mirror_ubuntu-zesty-kernel.git] / net / netlink / genetlink.c
index bc0e504f33a68ee92897cb3c45241d4d3348deba..8e63662c6fb0fc236da90883ff34b79d05308fcc 100644 (file)
@@ -513,6 +513,20 @@ void *genlmsg_put(struct sk_buff *skb, u32 portid, u32 seq,
 }
 EXPORT_SYMBOL(genlmsg_put);
 
+static int genl_lock_start(struct netlink_callback *cb)
+{
+       /* our ops are always const - netlink API doesn't propagate that */
+       const struct genl_ops *ops = cb->data;
+       int rc = 0;
+
+       if (ops->start) {
+               genl_lock();
+               rc = ops->start(cb);
+               genl_unlock();
+       }
+       return rc;
+}
+
 static int genl_lock_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
 {
        /* our ops are always const - netlink API doesn't propagate that */
@@ -577,6 +591,7 @@ static int genl_family_rcv_msg(struct genl_family *family,
                                .module = family->module,
                                /* we have const, but the netlink API doesn't */
                                .data = (void *)ops,
+                               .start = genl_lock_start,
                                .dump = genl_lock_dumpit,
                                .done = genl_lock_done,
                        };
@@ -588,6 +603,7 @@ static int genl_family_rcv_msg(struct genl_family *family,
                } else {
                        struct netlink_dump_control c = {
                                .module = family->module,
+                               .start = ops->start,
                                .dump = ops->dumpit,
                                .done = ops->done,
                        };