summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe
diff options
context:
space:
mode:
authoroster <oster@NetBSD.org>2004-03-04 02:49:58 +0000
committeroster <oster@NetBSD.org>2004-03-04 02:49:58 +0000
commit708c19adaf366570611da6c3a7b9d9949b36d21c (patch)
tree26cfb98f3e7d55f6c57b1b89bba7f30687d1084e /sys/dev/raidframe
parent119b5f631ac3e5af84a6f0ab3912e300e4e9f23a (diff)
Fix mcpair locking issues -- we really don't need the lock held
the entire time we spend in calling rf_DiskIOEnqueue().
Diffstat (limited to 'sys/dev/raidframe')
-rw-r--r--sys/dev/raidframe/rf_copyback.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/raidframe/rf_copyback.c b/sys/dev/raidframe/rf_copyback.c
index 90a53c46c12..6046f9c9650 100644
--- a/sys/dev/raidframe/rf_copyback.c
+++ b/sys/dev/raidframe/rf_copyback.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_copyback.c,v 1.27 2003/12/30 21:59:03 oster Exp $ */
+/* $NetBSD: rf_copyback.c,v 1.28 2004/03/04 02:49:58 oster Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -38,7 +38,7 @@
****************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.27 2003/12/30 21:59:03 oster Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.28 2004/03/04 02:49:58 oster Exp $");
#include <dev/raidframe/raidframevar.h>
@@ -351,9 +351,11 @@ rf_CopybackOne(RF_CopybackDesc_t *desc, int typ, RF_RaidAddr_t addr,
RF_LOCK_MUTEX(desc->mcpair->mutex);
desc->mcpair->flag = 0;
+ RF_UNLOCK_MUTEX(desc->mcpair->mutex);
rf_DiskIOEnqueue(&raidPtr->Queues[spCol], desc->readreq, RF_IO_NORMAL_PRIORITY);
+ RF_LOCK_MUTEX(desc->mcpair->mutex);
while (!desc->mcpair->flag) {
RF_WAIT_MCPAIR(desc->mcpair);
}