Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.
For bugs related to Red Hat Enterprise Linux 5 product line. The current stable release is 5.10. For Red Hat Enterprise Linux 6 and above, please visit Red Hat JIRA https://issues.redhat.com/secure/CreateIssue!default.jspa?pid=12332745 to report new issues.

Bug 586237

Summary: "hung_task" feature port is incomplete
Product: Red Hat Enterprise Linux 5 Reporter: Linda Wang <lwang>
Component: kernelAssignee: Red Hat Kernel Manager <kernel-mgr>
Status: CLOSED DUPLICATE QA Contact: Red Hat Kernel QE team <kernel-qe>
Severity: medium Docs Contact:
Priority: low    
Version: 5.5CC: khorenko, xemul
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 582237 Environment:
Last Closed: 2010-04-27 06:35:26 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: 582237    
Bug Blocks:    

Description Linda Wang 2010-04-27 06:34:32 UTC
+++ This bug was initially created as a clone of Bug #582237 +++

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.

Comment 1 Linda Wang 2010-04-27 06:35:26 UTC

*** This bug has been marked as a duplicate of bug 582237 ***