@@ -711,6 +711,12 @@ static void get_reorder(struct netem_sched_data *q, const struct nlattr *attr)
init_crandom(&q->reorder_cor, r->correlation);
}
+static void reorder_reset(struct netem_sched_data *q)
+{
+ q->reorder = 0;
+ memset(&q->reorder_cor, 0, sizeof(struct crndstate));
+}
+
static void get_corrupt(struct netem_sched_data *q, const struct nlattr *attr)
{
const struct tc_netem_corrupt *r = nla_data(attr);
@@ -879,12 +885,16 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt)
*/
if (q->gap)
q->reorder = ~0;
+ else
+ q->reorder = 0;
if (tb[TCA_NETEM_CORR])
get_correlation(q, tb[TCA_NETEM_CORR]);
if (tb[TCA_NETEM_REORDER])
get_reorder(q, tb[TCA_NETEM_REORDER]);
+ else
+ reorder_reset(q);
if (tb[TCA_NETEM_CORRUPT])
get_corrupt(q, tb[TCA_NETEM_CORRUPT]);
If we set a netem qdisc with reorder option, while we use "#tc qdisc replace ..." that without reorder option to replace the old qdisc, the old reorder is still there. We need clear old reorder after qdisc's replaced. Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- net/sched/sch_netem.c | 10 ++++++++++ 1 file changed, 10 insertions(+)