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);