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.
*** Bug 586237 has been marked as a duplicate of this bug. ***
Posted: http://post-office.corp.redhat.com/archives/rhkernel-list/2010-June/msg01069.html
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