summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_conf.c
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2009-05-21 13:22:07 +0000
committerattilio <attilio@FreeBSD.org>2009-05-21 13:22:07 +0000
commit68353e273feaeabea942a8eaeeebda9412574dec (patch)
tree645ba2baaf773bb1d0b10d1133487449b8074269 /sys/kern/kern_conf.c
parentf8c44f421431480944363c3b91303e82e91d0797 (diff)
downloadFreeBSD-src-68353e273feaeabea942a8eaeeebda9412574dec.zip
FreeBSD-src-68353e273feaeabea942a8eaeeebda9412574dec.tar.gz
Move the M_WAITOK flag in notify() into an M_NOWAIT one in order to match
the behaviour alredy present with the further malloc() call in devctl_notify(). This fixes a bug in the CAM layer where the camisr handler finished to call camperiphfree() (and subsequently destroy_dev() resulting in a new dev notify) while the xpt lock is held. PR: kern/130330 Tested by: Riccardo Torrini <riccardo dot torrini at esaote dot com>
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r--sys/kern/kern_conf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 61488e9..284f482 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -491,7 +491,9 @@ notify(struct cdev *dev, const char *ev)
if (cold)
return;
namelen = strlen(dev->si_name);
- data = malloc(namelen + sizeof(prefix), M_TEMP, M_WAITOK);
+ data = malloc(namelen + sizeof(prefix), M_TEMP, M_NOWAIT);
+ if (data == NULL)
+ return;
memcpy(data, prefix, sizeof(prefix) - 1);
memcpy(data + sizeof(prefix) - 1, dev->si_name, namelen + 1);
devctl_notify("DEVFS", "CDEV", ev, data);
OpenPOWER on IntegriCloud