From f64c0e34235c0ee36e44e9ff1cf0cd3764ed227d Mon Sep 17 00:00:00 2001 From: Eric Taylor Date: Thu, 11 Jun 2009 11:10:31 -0600 Subject: 6566744 vdev_open() should be done in parallel --- usr/src/uts/common/fs/zfs/spa_misc.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'usr/src/uts/common/fs/zfs/spa_misc.c') 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 -- cgit v1.2.3