]> granicus.if.org Git - zfs/commitdiff
Fix 'zpool clear' on suspended pools
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 25 Jul 2017 19:20:52 +0000 (12:20 -0700)
committerGitHub <noreply@github.com>
Tue, 25 Jul 2017 19:20:52 +0000 (12:20 -0700)
'zpool clear' should be able to resume I/O on suspended, but otherwise
healthy, pools.

4a283c7 accidentally introduced a new code path where we call
txg_wait_synced() on the suspended pool before we had the chance to
resume I/O via zio_resume(): this results in the 'zpool clear'
command hanging indefinitely, waiting for a TXG that cannot be synced.

Fix this by avoiding the call to txg_wait_synced().

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #6399

module/zfs/zfs_ioctl.c

index b2f5db584daa9ceff075b4d46838c0c4fcf018fc..d195eded76dc818f2f5da68677ce53915449ba41 100644 (file)
@@ -4946,7 +4946,8 @@ zfs_ioc_clear(zfs_cmd_t *zc)
 
        vdev_clear(spa, vd);
 
-       (void) spa_vdev_state_exit(spa, spa->spa_root_vdev, 0);
+       (void) spa_vdev_state_exit(spa, spa_suspended(spa) ?
+           NULL : spa->spa_root_vdev, 0);
 
        /*
         * Resume any suspended I/Os.