Bug 582237
| Summary: | "hung_task" feature port is incomplete | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 5 | Reporter: | Konstantin Khorenko <khorenko> | |
| Component: | kernel | Assignee: | Jerome Marchand <jmarchan> | |
| Status: | CLOSED ERRATA | QA Contact: | Hangbin Liu <haliu> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | low | |||
| Version: | 5.5 | CC: | anton, haliu, lwang, qcai, xemul | |
| Target Milestone: | rc | Keywords: | FutureFeature | |
| Target Release: | --- | |||
| Hardware: | All | |||
| OS: | Linux | |||
| Whiteboard: | ||||
| Fixed In Version: | Doc Type: | Enhancement | ||
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 586237 (view as bug list) | Environment: | ||
| Last Closed: | 2011-01-13 21:26:50 UTC | Type: | --- | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 586237 | |||
*** Bug 586237 has been marked as a duplicate of this bug. *** in kernel-2.6.18-211.el5 You can download this test kernel from http://people.redhat.com/jwilson/el5 Detailed testing feedback is always welcomed. An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2011-0017.html |
Pavel Emelyanov from Parallels Virtuozzo Containers team has found that 2.6.18-194.el5 kernel has a new feature "hung_task" backported from mainstream. Unfortunately there is some important piece of code is missing: The bad thing is that the following piece of code (marked with >>>-s) in the check_hung_uninterruptible_tasks() routine was lost: do_each_thread(g, t) { if (!max_count--) goto unlock; if (!--batch_count) { batch_count = HUNG_TASK_BATCHING; rcu_lock_break(g, t); >>> >>> /* Exit if t or g was unhashed during refresh. */ >>> >>> if (t->state == TASK_DEAD || g->state == TASK_DEAD) >>> >>> goto unlock; } /* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */ if (t->state == TASK_UNINTERRUPTIBLE) check_hung_task(t, timeout); } while_each_thread(g, t); This code is required, since in case t or g goes dead the lists being scanned are no longer self-consistent. Please, recheck and add the code.