diff options
author | Boris Protopopov <[email protected]> | 2014-03-22 05:07:14 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-03-10 09:49:22 -0800 |
commit | a0bd735adb1b1eb81fef10b4db102ee051c4d4ff (patch) | |
tree | 121fcde3000a116f0c33143b28a530a87fd6073a /scripts | |
parent | eb0856779f7b57162c9179f238104f6d6e150745 (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-x | scripts/zconfig.sh | 19 |
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 } |