From 8d7b52b382c608ef456c61274d1e7564b42ca092 Mon Sep 17 00:00:00 2001 From: shadow <shadow> Date: Thu, 13 Dec 2007 08:52:20 +0000 Subject: [PATCH] not alloc memory with spinlock held. b=14418 i=green i=johann --- lustre/ChangeLog | 7 +++++++ lustre/obdclass/obd_config.c | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 35739543a9..5adb04d039 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -12,6 +12,13 @@ * 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 diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c index 0b5ec846f3..3c0da533e3 100644 --- a/lustre/obdclass/obd_config.c +++ b/lustre/obdclass/obd_config.c @@ -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; - + 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) { - 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); - spin_unlock(&obd->obd_dev_lock); if (err) GOTO(err_hash, err); -- GitLab