aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJamal Hadi Salim <hadi@cyberus.ca>2006-12-01 23:07:42 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 00:32:09 -0500
commita4d1366d5080fcb4514db58c320b9f60d78918e6 (patch)
tree8358724419b81add4a32e70d9bdcc4676ccd531e
parentc40a27f48ceee648e9cfdda040b69e7010d9f82c (diff)
[GENETLINK]: Add cmd dump completion.
Remove assumption that generic netlink commands cannot have dump completion callbacks. Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/genetlink.h2
-rw-r--r--net/netlink/genetlink.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index 7fd131c9a8cc..adff4c898d50 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -53,6 +53,7 @@ struct genl_info
53 * @policy: attribute validation policy 53 * @policy: attribute validation policy
54 * @doit: standard command callback 54 * @doit: standard command callback
55 * @dumpit: callback for dumpers 55 * @dumpit: callback for dumpers
56 * @done: completion callback for dumps
56 * @ops_list: operations list 57 * @ops_list: operations list
57 */ 58 */
58struct genl_ops 59struct genl_ops
@@ -64,6 +65,7 @@ struct genl_ops
64 struct genl_info *info); 65 struct genl_info *info);
65 int (*dumpit)(struct sk_buff *skb, 66 int (*dumpit)(struct sk_buff *skb,
66 struct netlink_callback *cb); 67 struct netlink_callback *cb);
68 int (*done)(struct netlink_callback *cb);
67 struct list_head ops_list; 69 struct list_head ops_list;
68}; 70};
69 71
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index cc874f0fcbdb..b9b03747c1f3 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -331,7 +331,7 @@ static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
331 } 331 }
332 332
333 *errp = err = netlink_dump_start(genl_sock, skb, nlh, 333 *errp = err = netlink_dump_start(genl_sock, skb, nlh,
334 ops->dumpit, NULL); 334 ops->dumpit, ops->done);
335 if (err == 0) 335 if (err == 0)
336 skb_pull(skb, min(NLMSG_ALIGN(nlh->nlmsg_len), 336 skb_pull(skb, min(NLMSG_ALIGN(nlh->nlmsg_len),
337 skb->len)); 337 skb->len));