Whamcloud - gitweb
not alloc memory with spinlock held.
authorshadow <shadow>
Thu, 13 Dec 2007 08:52:20 +0000 (08:52 +0000)
committershadow <shadow>
Thu, 13 Dec 2007 08:52:20 +0000 (08:52 +0000)
b=14418
i=green
i=johann

lustre/ChangeLog
lustre/obdclass/obd_config.c

index 3573954..5adb04d 100644 (file)
        * Recommended e2fsprogs version: 1.40.2-cfs4
        * Note that reiserfs quotas are disabled on SLES 10 in this kernel.
 
        * Recommended e2fsprogs version: 1.40.2-cfs4
        * Note that reiserfs quotas are disabled on SLES 10 in this kernel.
 
+Severity   : minor
+Bugzilla   : 14418
+Frequency  : only at startup
+Description: not alloc memory with spinlock held.
+Details    : allocation memory with GFP_KERNEL can produce sleep deadlock,
+             if any spinlock held.
+
 Severity   : enhancement
 Bugzilla   : 12211
 Description: make lustre randomly fail allocating memory
 Severity   : enhancement
 Bugzilla   : 12211
 Description: make lustre randomly fail allocating memory
index 0b5ec84..3c0da53 100644 (file)
@@ -257,19 +257,18 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
         /* just leave this on forever.  I can't use obd_set_up here because
            other fns check that status, and we're not actually set up yet. */
         obd->obd_starting = 1;
         /* just leave this on forever.  I can't use obd_set_up here because
            other fns check that status, and we're not actually set up yet. */
         obd->obd_starting = 1;
+        spin_unlock(&obd->obd_dev_lock);
+
         /* create an uuid-export hash body */
         err = lustre_hash_init(&obd->obd_uuid_hash_body, "UUID_HASH", 
                                128, &uuid_hash_operations);
         if (err) {
         /* create an uuid-export hash body */
         err = lustre_hash_init(&obd->obd_uuid_hash_body, "UUID_HASH", 
                                128, &uuid_hash_operations);
         if (err) {
-                spin_unlock(&obd->obd_dev_lock);
                 GOTO(err_hash, err);
         }
 
         /* create a nid-export hash body */
         err = lustre_hash_init(&obd->obd_nid_hash_body, "NID_HASH", 
                                128, &nid_hash_operations);
                 GOTO(err_hash, err);
         }
 
         /* create a nid-export hash body */
         err = lustre_hash_init(&obd->obd_nid_hash_body, "NID_HASH", 
                                128, &nid_hash_operations);
-        spin_unlock(&obd->obd_dev_lock);
         if (err)
                 GOTO(err_hash, err);
 
         if (err)
                 GOTO(err_hash, err);