--- 2611-rc3+bk3/net/sched/cls_api.c 2005/02/06 16:28:26 1.1 +++ 2611-rc3+bk3/net/sched/cls_api.c 2005/02/06 16:41:47 @@ -326,6 +326,7 @@ { struct tcmsg *tcm; struct nlmsghdr *nlh; + int ret; unsigned char *b = skb->tail; nlh = NLMSG_PUT(skb, pid, seq, event, sizeof(*tcm)); @@ -339,8 +340,11 @@ tcm->tcm_handle = fh; if (RTM_DELTFILTER != event) { tcm->tcm_handle = 0; - if (tp->ops->dump && tp->ops->dump(tp, fh, skb, tcm) < 0) - goto rtattr_failure; + if (tp->ops->dump) { + ret = tp->ops->dump(tp, fh, skb, tcm); + if (ret < 0) + goto rtattr_failure; + } } nlh->nlmsg_len = skb->tail - b; return skb->len; @@ -348,6 +352,8 @@ nlmsg_failure: rtattr_failure: skb_trim(skb, b - skb->data); + if (ret == -ENOENT) + return skb->len; return -1; } --- 2611-rc3+bk3/net/sched/cls_u32.c 2005/02/06 16:30:44 1.1 +++ 2611-rc3+bk3/net/sched/cls_u32.c 2005/02/06 16:33:13 @@ -76,6 +76,7 @@ char indev[IFNAMSIZ]; #endif u8 fshift; + u32 prio; struct tcf_result res; struct tc_u_hnode *ht_down; #ifdef CONFIG_CLS_U32_PERF @@ -641,6 +642,7 @@ memcpy(&n->sel, s, sizeof(*s) + s->nkeys*sizeof(struct tc_u32_key)); n->ht_up = ht; n->handle = handle; + n->prio = tp->prio; { u8 i = 0; u32 mask = s->hmask; @@ -736,6 +738,9 @@ if (n == NULL) return skb->len; + if (n->prio != tp->prio) + return -ENOENT; + t->tcm_handle = n->handle; rta = (struct rtattr*)b;