@@ -732,6 +732,12 @@ static void get_corrupt(struct netem_sched_data *q, const struct nlattr *attr)
init_crandom(&q->corrupt_cor, r->correlation);
}
+static void corrupt_reset(struct netem_sched_data *q)
+{
+ q->corrupt = 0;
+ memset(&q->corrupt_cor, 0, sizeof(struct crndstate));
+}
+
static void get_rate(struct netem_sched_data *q, const struct nlattr *attr)
{
const struct tc_netem_rate *r = nla_data(attr);
@@ -907,6 +913,8 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt)
if (tb[TCA_NETEM_CORRUPT])
get_corrupt(q, tb[TCA_NETEM_CORRUPT]);
+ else
+ corrupt_reset(q);
if (tb[TCA_NETEM_RATE])
get_rate(q, tb[TCA_NETEM_RATE]);
If we set a netem qdisc with corrupt option, while we use "#tc qdisc replace ..." that without corrupt option to replace the old qdisc, the old corrupt is still there. We need clear old corrupt after qdisc's replaced. Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- net/sched/sch_netem.c | 8 ++++++++ 1 file changed, 8 insertions(+)