From 58b0b144e84fa3e2186c07bff05ff930db5370e9 Mon Sep 17 00:00:00 2001
From: Scott Long <scottl@FreeBSD.org>
Date: Thu, 19 Apr 2007 18:14:33 +0000
Subject: [PATCH] Avoid problems with make_dev.

---
 sys/cam/scsi/scsi_pt.c | 2 ++
 sys/cam/scsi/scsi_sa.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/sys/cam/scsi/scsi_pt.c b/sys/cam/scsi/scsi_pt.c
index 9f474d9c7e21..7201a58727cf 100644
--- a/sys/cam/scsi/scsi_pt.c
+++ b/sys/cam/scsi/scsi_pt.c
@@ -303,9 +303,11 @@ ptctor(struct cam_periph *periph, void *arg)
 			  SID_TYPE(&cgd->inq_data) | DEVSTAT_TYPE_IF_SCSI,
 			  DEVSTAT_PRIORITY_OTHER);
 
+	cam_periph_unlock(periph);
 	softc->dev = make_dev(&pt_cdevsw, periph->unit_number, UID_ROOT,
 			      GID_OPERATOR, 0600, "%s%d", periph->periph_name,
 			      periph->unit_number);
+	cam_periph_lock(periph);
 	softc->dev->si_drv1 = periph;
 
 	/*
diff --git a/sys/cam/scsi/scsi_sa.c b/sys/cam/scsi/scsi_sa.c
index 170d35c9c999..69d99d2b32d9 100644
--- a/sys/cam/scsi/scsi_sa.c
+++ b/sys/cam/scsi/scsi_sa.c
@@ -1521,6 +1521,7 @@ saregister(struct cam_periph *periph, void *arg)
 	    DEVSTAT_BS_UNAVAILABLE, SID_TYPE(&cgd->inq_data) |
 	    DEVSTAT_TYPE_IF_SCSI, DEVSTAT_PRIORITY_TAPE);
 
+	cam_periph_unlock(periph);
 	softc->devs.ctl_dev = make_dev(&sa_cdevsw, SAMINOR(SA_CTLDEV,
 	    periph->unit_number, 0, SA_ATYPE_R), UID_ROOT, GID_OPERATOR,
 	    0660, "%s%d.ctl", periph->periph_name, periph->unit_number);
@@ -1563,6 +1564,7 @@ saregister(struct cam_periph *periph, void *arg)
 			alias->si_drv1 = periph;
 		}
 	}
+	cam_periph_lock(periph);
 
 	/*
 	 * Add an async callback so that we get