Commit:     60a0d23386eab0559ad32ae50b200cc58545f327
Parent:     c642b8391cf8efc3622cc97329a0f46e7cbb70b8
Author:     Johannes Berg <[EMAIL PROTECTED]>
AuthorDate: Wed Nov 14 17:00:16 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Nov 14 18:45:43 2007 -0800

    hibernate: fix lockdep report
    Lockdep reports a circular locking dependency in the hibernate code
     - during system boot hibernate code (from an initcall) locks pm_mutex
       and then a sysfs buffer mutex via name_to_dev_t
     - during regular operation hibernate code locks pm_mutex under a
       sysfs buffer mutex because it's called from sysfs methods.
    The deadlock can never happen because during initcall invocation nothing
    can write to sysfs yet. This removes the lockdep report by marking the
    initcall locking as being in a different class.
    Signed-off-by: Johannes Berg <[EMAIL PROTECTED]>
    Cc: "Rafael J. Wysocki" <[EMAIL PROTECTED]>
    Cc: Alan Stern <[EMAIL PROTECTED]>
    Acked-by: Peter Zijlstra <[EMAIL PROTECTED]>
    Cc: Pavel Machek <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 kernel/power/disk.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/kernel/power/disk.c b/kernel/power/disk.c
index 8b15f77..05b6479 100644
--- a/kernel/power/disk.c
+++ b/kernel/power/disk.c
@@ -456,7 +456,17 @@ static int software_resume(void)
        int error;
        unsigned int flags;
-       mutex_lock(&pm_mutex);
+       /*
+        * name_to_dev_t() below takes a sysfs buffer mutex when sysfs
+        * is configured into the kernel. Since the regular hibernate
+        * trigger path is via sysfs which takes a buffer mutex before
+        * calling hibernate functions (which take pm_mutex) this can
+        * cause lockdep to complain about a possible ABBA deadlock
+        * which cannot happen since we're in the boot code here and
+        * sysfs can't be invoked yet. Therefore, we use a subclass
+        * here to avoid lockdep complaining.
+        */
+       mutex_lock_nested(&pm_mutex, SINGLE_DEPTH_NESTING);
        if (!swsusp_resume_device) {
                if (!strlen(resume_file)) {
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to