net: Only store high 16 bits of kernel generated filter priorities
authorRobert Love <robert.w.love@intel.com>
Sat, 2 May 2009 20:48:32 +0000 (13:48 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 May 2009 20:48:32 +0000 (13:48 -0700)
The kernel should only be using the high 16 bits of a kernel
generated priority. Filter priorities in all other cases only
use the upper 16 bits of the u32 'prio' field of 'struct tcf_proto',
but when the kernel generates the priority of a filter is saves all
32 bits which can result in incorrect lookup failures when a filter
needs to be deleted or modified.

Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_api.c

index 173fcc4..0759f32 100644 (file)
@@ -254,7 +254,7 @@ replay:
                }
                tp->ops = tp_ops;
                tp->protocol = protocol;
-               tp->prio = nprio ? : tcf_auto_prio(*back);
+               tp->prio = nprio ? : TC_H_MAJ(tcf_auto_prio(*back));
                tp->q = q;
                tp->classify = tp_ops->classify;
                tp->classid = parent;