Message ID | 20210126215641.545645-1-ovov@yandex-team.ru (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: sched: replaced invalid qdisc tree flush helper in qdisc_replace | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | fail | 3 maintainers not CCed: pabeni@redhat.com davem@davemloft.net kuba@kernel.org |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 4688 this patch: 4688 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | fail | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 5116 this patch: 5116 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
On Wed, 27 Jan 2021 00:56:41 +0300 Alexander Ovechkin wrote: > Commit e5f0e8f8e456 ("net: sched: introduce and use qdisc tree flush/purge helpers") > introduced qdisc tree flush/purge helpers, but erroneously used flush helper > instead of purge helper in qdisc_replace function. > This issue was found in our CI, that tests various qdisc setups by configuring > qdisc and sending data through it. Call of invalid helper sporadically leads > to corruption of vt_tree/cf_tree of hfsc_class that causes kernel oops: The patch in question indeed does change the code, but I wonder if the problem isn't in HFSC. Why would the caller depend on the old qdisc being purged by qdisc_replace()? Please add some more info on this.. > Fixes: e5f0e8f8e456 ("net: sched: introduce and use qdisc tree flush/purge > helpers") ... fix the tag (it shouldn't be wrapped), and CC the right people (especially the author of the patch you're pointing the tag at - scripts/get_maintainer is your friend), and repost. > Signed-off-by: Alexander Ovechkin <ovov@yandex-team.ru> > Reported-by: Alexander Kuznetsov <wwfq@yandex-team.ru> > Acked-by: Dmitry Monakhov <dmtrmonakhov@yandex-team.ru> > Acked-by: Dmitry Yakunin <zeil@yandex-team.ru> > --- > include/net/sch_generic.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h > index 639e465a108f..5b490b5591df 100644 > --- a/include/net/sch_generic.h > +++ b/include/net/sch_generic.h > @@ -1143,7 +1143,7 @@ static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new, > old = *pold; > *pold = new; > if (old != NULL) > - qdisc_tree_flush_backlog(old); > + qdisc_purge_queue(old); > sch_tree_unlock(sch); > > return old;
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 639e465a108f..5b490b5591df 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -1143,7 +1143,7 @@ static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new, old = *pold; *pold = new; if (old != NULL) - qdisc_tree_flush_backlog(old); + qdisc_purge_queue(old); sch_tree_unlock(sch); return old;