mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 03:08:51 +03:00
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 <boris.protopopov@actifio.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #2217 Closes #3678 Closes #3681
This commit is contained in:
committed by
Brian Behlendorf
parent
eb0856779f
commit
a0bd735adb
+15
-4
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user