summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorBoris Protopopov <[email protected]>2014-03-22 05:07:14 -0400
committerBrian Behlendorf <[email protected]>2016-03-10 09:49:22 -0800
commita0bd735adb1b1eb81fef10b4db102ee051c4d4ff (patch)
tree121fcde3000a116f0c33143b28a530a87fd6073a /scripts
parenteb0856779f7b57162c9179f238104f6d6e150745 (diff)
Add support for asynchronous zvol minor operations
zfsonlinux issue #2217 - zvol minor operations: check snapdev property before traversing snapshots of a dataset zfsonlinux issue #3681 - lock order inversion between zvol_open() and dsl_pool_sync()...zvol_rename_minors() Create a per-pool zvol taskq for asynchronous zvol tasks. There are a few key design decisions to be aware of. * Each taskq must be single threaded to ensure tasks are always processed in the order in which they were dispatched. * There is a taskq per-pool in order to keep the pools independent. This way if one pool is suspended it will not impact another. * The preferred location to dispatch a zvol minor task is a sync task. In this context there is easy access to the spa_t and minimal error handling is required because the sync task must succeed. Support for asynchronous zvol minor operations address issue #3681. Signed-off-by: Boris Protopopov <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #2217 Closes #3678 Closes #3681
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/zconfig.sh19
1 files changed, 15 insertions, 4 deletions
diff --git a/scripts/zconfig.sh b/scripts/zconfig.sh
index 45ccf62ed..1908dc1d6 100755
--- a/scripts/zconfig.sh
+++ b/scripts/zconfig.sh
@@ -217,15 +217,26 @@ test_3() {
zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 11
+ # Toggle the snapdev and observe snapshot device links toggled
+ ${ZFS} set snapdev=hidden ${FULL_ZVOL_NAME} || fail 12
+
+ zconfig_zvol_device_stat 7 ${POOL_NAME} ${FULL_ZVOL_NAME} \
+ "invalid" ${FULL_CLONE_NAME} || fail 13
+
+ ${ZFS} set snapdev=visible ${FULL_ZVOL_NAME} || fail 14
+
+ zconfig_zvol_device_stat 10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
+ ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 15
+
# Destroy the pool and consequently the devices
- ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 12
+ ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 16
# verify the devices were removed
zconfig_zvol_device_stat 0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
- ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 13
+ ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 17
- ${ZFS_SH} -u || fail 14
- rm -f ${TMP_CACHE} || fail 15
+ ${ZFS_SH} -u || fail 18
+ rm -f ${TMP_CACHE} || fail 19
pass
}