]> git.baikalelectronics.ru Git - kernel.git/commit
net_sched: prio: insure proper transactional behavior
authorEric Dumazet <edumazet@google.com>
Mon, 13 Jun 2016 18:33:32 +0000 (11:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Jun 2016 19:29:54 +0000 (12:29 -0700)
commit520a7f0dc1dcace04ea77c6286d9d1e608eb264f
treeb6f10468510e1731431371abf4a759cc8f65eb73
parentf51e4ccedef7d2c495f3007851c29dd0c4e227fd
net_sched: prio: insure proper transactional behavior

Now prio_init() can return -ENOMEM, it also has to make sure
any allocated qdiscs are freed, since the caller (qdisc_create()) wont
call ->destroy() handler for us.

More generally, we want a transactional behavior for "tc qdisc
change ...", so prio_tune() should not make modifications if
any error is returned.

It means that we must validate parameters and allocate missing qdisc(s)
before taking root qdisc lock exactly once, to not leave the prio qdisc
in an intermediate state.

Fixes: 97141635ea43 ("net_sched: prio: properly report out of memory errors")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Cong Wang <xiyou.wangcong@gmail.com>
Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_prio.c