diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-06 08:23:39 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-06 08:23:39 -0400 |
commit | 68083e05d72d94f347293d8cc0067050ba904bfa (patch) | |
tree | 842e71365bd90866be7add181661a4039d891564 /net/netlink/genetlink.c | |
parent | 7baac8b91f9871ba8cb09af84de4ae1d86d07812 (diff) | |
parent | b7279469d66b55119784b8b9529c99c1955fe747 (diff) |
Merge commit 'v2.6.26-rc9' into cpus4096
Diffstat (limited to 'net/netlink/genetlink.c')
-rw-r--r-- | net/netlink/genetlink.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index d16929c9b4bc..3e1191cecaf0 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
@@ -444,8 +444,11 @@ static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
444 | if (ops->dumpit == NULL) | 444 | if (ops->dumpit == NULL) |
445 | return -EOPNOTSUPP; | 445 | return -EOPNOTSUPP; |
446 | 446 | ||
447 | return netlink_dump_start(genl_sock, skb, nlh, | 447 | genl_unlock(); |
448 | ops->dumpit, ops->done); | 448 | err = netlink_dump_start(genl_sock, skb, nlh, |
449 | ops->dumpit, ops->done); | ||
450 | genl_lock(); | ||
451 | return err; | ||
449 | } | 452 | } |
450 | 453 | ||
451 | if (ops->doit == NULL) | 454 | if (ops->doit == NULL) |
@@ -554,7 +557,8 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq, | |||
554 | return genlmsg_end(skb, hdr); | 557 | return genlmsg_end(skb, hdr); |
555 | 558 | ||
556 | nla_put_failure: | 559 | nla_put_failure: |
557 | return genlmsg_cancel(skb, hdr); | 560 | genlmsg_cancel(skb, hdr); |
561 | return -EMSGSIZE; | ||
558 | } | 562 | } |
559 | 563 | ||
560 | static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, | 564 | static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, |
@@ -590,7 +594,8 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, | |||
590 | return genlmsg_end(skb, hdr); | 594 | return genlmsg_end(skb, hdr); |
591 | 595 | ||
592 | nla_put_failure: | 596 | nla_put_failure: |
593 | return genlmsg_cancel(skb, hdr); | 597 | genlmsg_cancel(skb, hdr); |
598 | return -EMSGSIZE; | ||
594 | } | 599 | } |
595 | 600 | ||
596 | static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) | 601 | static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) |
@@ -601,9 +606,6 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) | |||
601 | int chains_to_skip = cb->args[0]; | 606 | int chains_to_skip = cb->args[0]; |
602 | int fams_to_skip = cb->args[1]; | 607 | int fams_to_skip = cb->args[1]; |
603 | 608 | ||
604 | if (chains_to_skip != 0) | ||
605 | genl_lock(); | ||
606 | |||
607 | for (i = 0; i < GENL_FAM_TAB_SIZE; i++) { | 609 | for (i = 0; i < GENL_FAM_TAB_SIZE; i++) { |
608 | if (i < chains_to_skip) | 610 | if (i < chains_to_skip) |
609 | continue; | 611 | continue; |
@@ -621,9 +623,6 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) | |||
621 | } | 623 | } |
622 | 624 | ||
623 | errout: | 625 | errout: |
624 | if (chains_to_skip != 0) | ||
625 | genl_unlock(); | ||
626 | |||
627 | cb->args[0] = i; | 626 | cb->args[0] = i; |
628 | cb->args[1] = n; | 627 | cb->args[1] = n; |
629 | 628 | ||
@@ -768,7 +767,7 @@ static int __init genl_init(void) | |||
768 | 767 | ||
769 | /* we'll bump the group number right afterwards */ | 768 | /* we'll bump the group number right afterwards */ |
770 | genl_sock = netlink_kernel_create(&init_net, NETLINK_GENERIC, 0, | 769 | genl_sock = netlink_kernel_create(&init_net, NETLINK_GENERIC, 0, |
771 | genl_rcv, NULL, THIS_MODULE); | 770 | genl_rcv, &genl_mutex, THIS_MODULE); |
772 | if (genl_sock == NULL) | 771 | if (genl_sock == NULL) |
773 | panic("GENL: Cannot initialize generic netlink\n"); | 772 | panic("GENL: Cannot initialize generic netlink\n"); |
774 | 773 | ||