summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/spa_misc.c
diff options
context:
space:
mode:
authorEric Taylor <Eric.Taylor@Sun.COM>2009-06-11 11:10:31 -0600
committerEric Taylor <Eric.Taylor@Sun.COM>2009-06-11 11:10:31 -0600
commitf64c0e34235c0ee36e44e9ff1cf0cd3764ed227d (patch)
tree797b54b0cd47d836e93231cb700b6f8571950efd /usr/src/uts/common/fs/zfs/spa_misc.c
parentb9aa66a73c9016cf5c71fe80efe90ce9f2ca5c73 (diff)
downloadillumos-gate-f64c0e34235c0ee36e44e9ff1cf0cd3764ed227d.tar.gz
6566744 vdev_open() should be done in parallel
Diffstat (limited to 'usr/src/uts/common/fs/zfs/spa_misc.c')
-rw-r--r--usr/src/uts/common/fs/zfs/spa_misc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/zfs/spa_misc.c b/usr/src/uts/common/fs/zfs/spa_misc.c
index aea3f56252..8150ac937e 100644
--- a/usr/src/uts/common/fs/zfs/spa_misc.c
+++ b/usr/src/uts/common/fs/zfs/spa_misc.c
@@ -310,8 +310,12 @@ spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw)
void
spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw)
{
+ int wlocks_held = 0;
+
for (int i = 0; i < SCL_LOCKS; i++) {
spa_config_lock_t *scl = &spa->spa_config_lock[i];
+ if (scl->scl_writer == curthread)
+ wlocks_held |= (1 << i);
if (!(locks & (1 << i)))
continue;
mutex_enter(&scl->scl_lock);
@@ -331,6 +335,7 @@ spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw)
(void) refcount_add(&scl->scl_count, tag);
mutex_exit(&scl->scl_lock);
}
+ ASSERT(wlocks_held <= locks);
}
void