diff options
author | Jamal Hadi Salim <hadi@cyberus.ca> | 2008-08-13 05:41:22 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-08-13 05:41:22 -0400 |
commit | f97017cdefefdb6a0e19266024b0c6f9fd411eeb (patch) | |
tree | d223eabc477ff3bd172aac7dd9ab83e1566acf17 /net/sched/act_api.c | |
parent | 34093d055e09d1bb549efc11c8d448373437bbe4 (diff) |
net-sched: Fix actions flushing
Flushing of actions has been broken since we changed
the semantics of netlink parsed tb[X] to mean X is an attribute type.
This makes the flushing work.
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_api.c')
-rw-r--r-- | net/sched/act_api.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 26c7e1f9a350..88b57331d130 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c | |||
@@ -790,6 +790,8 @@ static int tca_action_flush(struct nlattr *nla, struct nlmsghdr *n, u32 pid) | |||
790 | err = a->ops->walk(skb, &dcb, RTM_DELACTION, a); | 790 | err = a->ops->walk(skb, &dcb, RTM_DELACTION, a); |
791 | if (err < 0) | 791 | if (err < 0) |
792 | goto nla_put_failure; | 792 | goto nla_put_failure; |
793 | if (err == 0) | ||
794 | goto noflush_out; | ||
793 | 795 | ||
794 | nla_nest_end(skb, nest); | 796 | nla_nest_end(skb, nest); |
795 | 797 | ||
@@ -807,6 +809,7 @@ nla_put_failure: | |||
807 | nlmsg_failure: | 809 | nlmsg_failure: |
808 | module_put(a->ops->owner); | 810 | module_put(a->ops->owner); |
809 | err_out: | 811 | err_out: |
812 | noflush_out: | ||
810 | kfree_skb(skb); | 813 | kfree_skb(skb); |
811 | kfree(a); | 814 | kfree(a); |
812 | return err; | 815 | return err; |
@@ -824,8 +827,10 @@ tca_action_gd(struct nlattr *nla, struct nlmsghdr *n, u32 pid, int event) | |||
824 | return ret; | 827 | return ret; |
825 | 828 | ||
826 | if (event == RTM_DELACTION && n->nlmsg_flags&NLM_F_ROOT) { | 829 | if (event == RTM_DELACTION && n->nlmsg_flags&NLM_F_ROOT) { |
827 | if (tb[0] != NULL && tb[1] == NULL) | 830 | if (tb[1] != NULL) |
828 | return tca_action_flush(tb[0], n, pid); | 831 | return tca_action_flush(tb[1], n, pid); |
832 | else | ||
833 | return -EINVAL; | ||
829 | } | 834 | } |
830 | 835 | ||
831 | for (i = 1; i <= TCA_ACT_MAX_PRIO && tb[i]; i++) { | 836 | for (i = 1; i <= TCA_ACT_MAX_PRIO && tb[i]; i++) { |