Skip to content

Commit

Permalink
[WIP] Fix "add_nested_replacing_spare" test case
Browse files Browse the repository at this point in the history
Use 'zpool reopen' instead of 'zpool scrub' to kick in the spare device:
this is required to avoid spurious failures caused by a race condition
in events processing by the ZFS Event Daemon:

P1 (zpool scrub)                            P2 (zed)
---
zfs_ioc_pool_scan()
 -> dsl_scan()
  -> vdev_reopen()
   -> vdev_set_state(VDEV_STATE_CANT_OPEN)
                                            zfs_ioc_vdev_attach()
                                             -> spa_vdev_attach()
                                              -> dsl_resilver_restart()
  -> dsl_sync_task()
   -> dsl_scan_setup_check()
   <- dsl_scan_setup_check(): EBUSY

Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
Requires-builders: test
  • Loading branch information
loli10K committed Apr 2, 2018
1 parent 10adee2 commit 2939286
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 9 deletions.
11 changes: 6 additions & 5 deletions TEST
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@
#TEST_PREPARE_SHARES="yes"

### SPLAT
#TEST_SPLAT_SKIP="yes"
TEST_SPLAT_SKIP="yes"
#TEST_SPLAT_OPTIONS="-acvx"

### ztest
#TEST_ZTEST_SKIP="yes"
TEST_ZTEST_SKIP="yes"
#TEST_ZTEST_TIMEOUT=1800
#TEST_ZTEST_DIR="/var/tmp/"
#TEST_ZTEST_OPTIONS="-V"
#TEST_ZTEST_CORE_DIR="/mnt/zloop"

### zimport
#TEST_ZIMPORT_SKIP="yes"
TEST_ZIMPORT_SKIP="yes"
#TEST_ZIMPORT_DIR="/var/tmp/zimport"
#TEST_ZIMPORT_VERSIONS="master installed"
#TEST_ZIMPORT_POOLS="zol-0.6.1 zol-0.6.2 master installed"
#TEST_ZIMPORT_OPTIONS="-c"

### xfstests
#TEST_XFSTESTS_SKIP="yes"
TEST_XFSTESTS_SKIP="yes"
#TEST_XFSTESTS_URL="https://github.com/behlendorf/xfstests/archive/"
#TEST_XFSTESTS_VER="zfs.tar.gz"
#TEST_XFSTESTS_POOL="tank"
Expand All @@ -39,10 +39,11 @@
#TEST_ZFSTESTS_ITERS="1"
#TEST_ZFSTESTS_OPTIONS="-vx"
#TEST_ZFSTESTS_RUNFILE="linux.run"
TEST_ZFSTESTS_RUNFILE="temp.run"
#TEST_ZFSTESTS_TAGS="functional"

### zfsstress
#TEST_ZFSSTRESS_SKIP="yes"
TEST_ZFSSTRESS_SKIP="yes"
#TEST_ZFSSTRESS_URL="https://github.com/nedbass/zfsstress/archive/"
#TEST_ZFSSTRESS_VER="master.tar.gz"
#TEST_ZFSSTRESS_RUNTIME=300
Expand Down
6 changes: 3 additions & 3 deletions module/zfs/zfs_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1732,12 +1732,12 @@ zfs_ioc_pool_scan(zfs_cmd_t *zc)
spa_t *spa;
int error;

if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
return (error);

if (zc->zc_flags >= POOL_SCRUB_FLAGS_END)
return (SET_ERROR(EINVAL));

if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
return (error);

if (zc->zc_flags == POOL_SCRUB_PAUSE)
error = spa_scrub_pause_resume(spa, POOL_SCRUB_PAUSE);
else if (zc->zc_cookie == POOL_SCAN_NONE)
Expand Down
50 changes: 50 additions & 0 deletions tests/runfiles/temp.run
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source. A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#

[DEFAULT]
pre = setup
quiet = False
pre_user = root
user = root
timeout = 600
post_user = root
post = cleanup
outputdir = /var/tmp/test_results
tags = ['functional']

[tests/functional/cli_root/zpool_add]
tests = ['add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare',
'add_nested_replacing_spare', 'add_nested_replacing_spare']
tags = ['functional', 'cli_root', 'zpool_add']

Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ do

# 2.1 Fault a device, verify the spare is kicked in
log_must zinject -d $FAULT_DEV -e nxio -T all -f 100 $TESTPOOL
log_must zpool scrub $TESTPOOL
log_must zpool reopen $TESTPOOL
log_must wait_vdev_state $TESTPOOL $FAULT_DEV "UNAVAIL" 60
log_must wait_vdev_state $TESTPOOL $SPARE_DEV1 "ONLINE" 60
log_must wait_hotspare_state $TESTPOOL $SPARE_DEV1 "INUSE"
Expand Down

0 comments on commit 2939286

Please sign in to comment.