aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2019-11-06 08:47:09 +0000
committerAndriy Gapon <avg@FreeBSD.org>2019-11-06 08:47:09 +0000
commit431b557a046211b10745d256bca9432b92f92604 (patch)
tree796dc7d1e3281f0152d2cae9688ab745504f91cb
parent2185a970072a56aa5573b33e848b900ef2067006 (diff)
downloadsrc-431b557a046211b10745d256bca9432b92f92604.tar.gz
src-431b557a046211b10745d256bca9432b92f92604.zip
10701 Correct lock ASSERTs in vdev_label_read/write
illumos/illumos-gate@58447f688d5e308373ab16a3b129bc0ba0fbc154 https://github.com/illumos/illumos-gate/commit/58447f688d5e308373ab16a3b129bc0ba0fbc154 https://www.illumos.org/issues/10701 Port of ZoL commit: 0091d66f4e Correct lock ASSERTs in vdev_label_read/write At a minimum, this fixes a blown assert during an MMP test run when running on a DEBUG build. Portions contributed by: Jerry Jelinek <jerry.jelinek@joyent.com> Author: Olaf Faaland <faaland1@llnl.gov>
Notes
Notes: svn path=/vendor-sys/illumos/dist/; revision=354379
-rw-r--r--uts/common/fs/zfs/vdev_label.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/uts/common/fs/zfs/vdev_label.c b/uts/common/fs/zfs/vdev_label.c
index 9f68b2af3e3e..55c3060042d9 100644
--- a/uts/common/fs/zfs/vdev_label.c
+++ b/uts/common/fs/zfs/vdev_label.c
@@ -184,8 +184,9 @@ static void
vdev_label_read(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset,
uint64_t size, zio_done_func_t *done, void *private, int flags)
{
- ASSERT(spa_config_held(zio->io_spa, SCL_STATE_ALL, RW_WRITER) ==
- SCL_STATE_ALL);
+ ASSERT(
+ spa_config_held(zio->io_spa, SCL_STATE, RW_READER) == SCL_STATE ||
+ spa_config_held(zio->io_spa, SCL_STATE, RW_WRITER) == SCL_STATE);
ASSERT(flags & ZIO_FLAG_CONFIG_WRITER);
zio_nowait(zio_read_phys(zio, vd,
@@ -198,17 +199,9 @@ void
vdev_label_write(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset,
uint64_t size, zio_done_func_t *done, void *private, int flags)
{
-#ifdef _KERNEL
- /*
- * This assert is invalid in the user-level ztest MMP code because
- * the ztest thread is not in dsl_pool_sync_context. ZoL does not
- * build the user-level code with DEBUG so this is not an issue there.
- */
- ASSERT(spa_config_held(zio->io_spa, SCL_ALL, RW_WRITER) == SCL_ALL ||
- (spa_config_held(zio->io_spa, SCL_CONFIG | SCL_STATE, RW_READER) ==
- (SCL_CONFIG | SCL_STATE) &&
- dsl_pool_sync_context(spa_get_dsl(zio->io_spa))));
-#endif
+ ASSERT(
+ spa_config_held(zio->io_spa, SCL_STATE, RW_READER) == SCL_STATE ||
+ spa_config_held(zio->io_spa, SCL_STATE, RW_WRITER) == SCL_STATE);
ASSERT(flags & ZIO_FLAG_CONFIG_WRITER);
zio_nowait(zio_write_phys(zio, vd,