diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index e983e5338870231e454ac793ce5ab058c5e1b6b4..8a0f5513e90fd9815bf4d5192c985c6177ba3882 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -14,6 +14,13 @@ tbd         Cluster File Systems, Inc. <info@clusterfs.com>
        * 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   : major
 Frequency  : always
 Bugzilla   : 14270
diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c
index f5c7be5ca9eca0c89729fd241bd50a6442b94d58..54cdc8f73fa97963e2ab18e0d631fe9614af4415 100644
--- a/lustre/obdclass/obd_config.c
+++ b/lustre/obdclass/obd_config.c
@@ -278,27 +278,23 @@ 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;
- 
+        spin_unlock(&obd->obd_dev_lock);
+
         /* create an uuid-export hash body */
-        err = lustre_hash_init(&obd->obd_uuid_hash_body, "UUID_HASH", 
+        err = lustre_hash_init(&obd->obd_uuid_hash_body, "UUID_HASH",
                                128, &uuid_hash_operations);
-        if (err) {
-                spin_unlock(&obd->obd_dev_lock);
+        if (err)
                 GOTO(err_hash, err);
-        }
 
         /* create a nid-export hash body */
-        err = lustre_hash_init(&obd->obd_nid_hash_body, "NID_HASH", 
+        err = lustre_hash_init(&obd->obd_nid_hash_body, "NID_HASH",
                                128, &nid_hash_operations);
-        if (err) {
-                spin_unlock(&obd->obd_dev_lock);
+        if (err)
                 GOTO(err_hash, err);
-        }
 
         /* create a nid-stats hash body */
         err = lustre_hash_init(&obd->obd_nid_stats_hash_body, "NID_STATS",
                                128, &nid_stat_hash_operations);
-        spin_unlock(&obd->obd_dev_lock);
         if (err)
                 GOTO(err_hash, err);