--- /dev/null
+From cb3b7106b526380da4133364ffb2cf187759d8ea Mon Sep 17 00:00:00 2001
+From: Thomas Graf <tgraf@suug.ch>
+Date: Wed, 3 Sep 2008 01:00:02 -0700
+Subject: [PATCH] sch_prio: Fix nla_parse_nested_compat() regression
+
+From: Thomas Graf <tgraf@suug.ch>
+
+[ No upstream commit, this is fixing code no longer in 2.6.27 ]
+
+nla_parse_nested_compat() was used to parse two different message
+formats in the netem and prio qdisc, when it was "fixed" to work
+with netem, it broke the multi queue support in the prio qdisc.
+Since the prio qdisc code in question is already removed in the
+development tree, this patch only fixes the regression in the
+stable tree.
+
+Based on original patch from Alexander H Duyck <alexander.h.duyck@intel.com>
+
+Signed-off-by: Thomas Graf <tgraf@suug.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/sched/sch_prio.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+--- a/net/sched/sch_prio.c
++++ b/net/sched/sch_prio.c
+@@ -228,14 +228,20 @@ static int prio_tune(struct Qdisc *sch,
+ {
+ struct prio_sched_data *q = qdisc_priv(sch);
+ struct tc_prio_qopt *qopt;
+- struct nlattr *tb[TCA_PRIO_MAX + 1];
++ struct nlattr *tb[TCA_PRIO_MAX + 1] = {0};
+ int err;
+ int i;
+
+- err = nla_parse_nested_compat(tb, TCA_PRIO_MAX, opt, NULL, qopt,
+- sizeof(*qopt));
+- if (err < 0)
+- return err;
++ qopt = nla_data(opt);
++ if (nla_len(opt) < sizeof(*qopt))
++ return -1;
++
++ if (nla_len(opt) >= sizeof(*qopt) + sizeof(struct nlattr)) {
++ err = nla_parse_nested(tb, TCA_PRIO_MAX,
++ (struct nlattr *) (qopt + 1), NULL);
++ if (err < 0)
++ return err;
++ }
+
+ q->bands = qopt->bands;
+ /* If we're multiqueue, make sure the number of incoming bands