diff options
author | Patrick McHardy <kaber@trash.net> | 2009-09-04 02:41:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-05 02:10:15 -0400 |
commit | c9f1d0389b962521af1e2b699c8ee5e299d77b85 (patch) | |
tree | e317e8b012be8b31b303bdb3f6ee5e3929de0a7b /net/sched/sch_api.c | |
parent | b1f57195585e376d1944c32c046359640b06a669 (diff) |
net_sched: fix class grafting errno codes
If the parent qdisc doesn't support classes, use EOPNOTSUPP.
If the parent class doesn't exist, use ENOENT. Currently EINVAL
is returned in both cases.
Additionally check whether grafting is supported and remove a now
unnecessary graft function from sch_ingress.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_api.c')
-rw-r--r-- | net/sched/sch_api.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 24d17ce9c294..bef2d645a366 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -728,14 +728,14 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, | |||
728 | } else { | 728 | } else { |
729 | const struct Qdisc_class_ops *cops = parent->ops->cl_ops; | 729 | const struct Qdisc_class_ops *cops = parent->ops->cl_ops; |
730 | 730 | ||
731 | err = -EINVAL; | 731 | err = -EOPNOTSUPP; |
732 | 732 | if (cops && cops->graft) { | |
733 | if (cops) { | ||
734 | unsigned long cl = cops->get(parent, classid); | 733 | unsigned long cl = cops->get(parent, classid); |
735 | if (cl) { | 734 | if (cl) { |
736 | err = cops->graft(parent, cl, new, &old); | 735 | err = cops->graft(parent, cl, new, &old); |
737 | cops->put(parent, cl); | 736 | cops->put(parent, cl); |
738 | } | 737 | } else |
738 | err = -ENOENT; | ||
739 | } | 739 | } |
740 | if (!err) | 740 | if (!err) |
741 | notify_and_destroy(skb, n, classid, old, new); | 741 | notify_and_destroy(skb, n, classid, old, new); |