diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 2e8bf8664d..a7d8b03c5a 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -1073,8 +1073,9 @@ zio_taskq_dispatch(zio_t *zio, enum zio_taskq_type q, boolean_t cutinline) q++; ASSERT3U(q, <, ZIO_TASKQ_TYPES); - (void) taskq_dispatch(spa->spa_zio_taskq[t][q], - (task_func_t *)zio_execute, zio, flags); + + while (taskq_dispatch(spa->spa_zio_taskq[t][q], + (task_func_t *)zio_execute, zio, flags) == 0); /* do nothing */ } static boolean_t diff --git a/scripts/zconfig.sh b/scripts/zconfig.sh index b74c57087a..a34e656daa 100755 --- a/scripts/zconfig.sh +++ b/scripts/zconfig.sh @@ -120,7 +120,7 @@ zconfig_test3() { TMP_FILE1=`mktemp` TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX` - echo -n "test 3 - ZVOL sanity: " + echo -n "test 3 - zvol+ext3 sanity: " # Create a pool and volume. ${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1 @@ -129,7 +129,7 @@ zconfig_test3() { # Partition the volume, for a 400M volume there will be # 812 cylinders, 16 heads, and 63 sectors per track. - /sbin/sfdisk -q /dev/${FULL_NAME} << EOF &>${TMP_FILE1} || fail 4 + /sbin/sfdisk -q /dev/zvol/${FULL_NAME} << EOF &>${TMP_FILE1} || fail 4 ,812 ; ; @@ -137,11 +137,11 @@ zconfig_test3() { EOF # Format the partition with ext3. - /sbin/mkfs.ext3 /dev/${FULL_NAME}1 &>${TMP_FILE1} || fail 5 + /sbin/mkfs.ext3 /dev/zvol/${FULL_NAME}1 &>${TMP_FILE1} || fail 5 # Mount the ext3 filesystem and copy some data to it. mkdir -p /tmp/${ZVOL_NAME} || fail 6 - mount /dev/${FULL_NAME}1 /tmp/${ZVOL_NAME} || fail 7 + mount /dev/zvol/${FULL_NAME}1 /tmp/${ZVOL_NAME} || fail 7 cp -RL ${SRC_DIR} /tmp/${ZVOL_NAME} || fail 8 # Verify the copied files match the original files. @@ -159,4 +159,122 @@ EOF } zconfig_test3 +# zpool import/export device check (1 volume, 1 snapshot, 1 clone) +zconfig_test4() { + POOL_NAME=tank + ZVOL_NAME=volume + SNAP_NAME=snapshot + CLONE_NAME=clone + FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME} + FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME} + FULL_CLONE_NAME=${POOL_NAME}/${CLONE_NAME} + TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX` + + echo -n "test 4 - zpool import/export device: " + + # Create a pool, volume, snapshot, and clone + ${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1 + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2 + ${ZFS} create -V 100M ${FULL_ZVOL_NAME} || fail 3 + ${ZFS} snapshot ${FULL_SNAP_NAME} || fail 4 + ${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 5 + + # Verify the devices were created + stat /dev/zvol/${POOL_NAME} &>/dev/null || fail 6 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null || fail 7 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null || fail 8 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null || fail 9 + + # Export the pool + ${ZPOOL} export ${POOL_NAME} || fail 10 + + # Verify the devices were removed + stat /dev/zvol/${POOL_NAME} &>/dev/null && fail 11 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null && fail 12 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null && fail 13 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null && fail 14 + + # Import the pool, wait 1 second for udev + ${ZPOOL} import ${POOL_NAME} && sleep 1 || fail 15 + + # Verify the devices were created + stat /dev/zvol/${POOL_NAME} &>/dev/null || fail 16 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null || fail 17 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null || fail 18 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null || fail 19 + + # Destroy the pool and consequently the devices + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 20 + + # Verify the devices were removed + stat /dev/zvol/${POOL_NAME} &>/dev/null && fail 21 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null && fail 22 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null && fail 23 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null && fail 24 + + ${ZFS_SH} -u || fail 25 + + pass +} +zconfig_test4 + +# zpool insmod/rmmod device check (1 volume, 1 snapshot, 1 clone) +zconfig_test5() { + POOL_NAME=tank + ZVOL_NAME=volume + SNAP_NAME=snapshot + CLONE_NAME=clone + FULL_ZVOL_NAME=${POOL_NAME}/${ZVOL_NAME} + FULL_SNAP_NAME=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME} + FULL_CLONE_NAME=${POOL_NAME}/${CLONE_NAME} + TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX` + + echo -n "test 5 - zpool insmod/rmmod device: " + + # Create a pool, volume, snapshot, and clone + ${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || fail 1 + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail 2 + ${ZFS} create -V 100M ${FULL_ZVOL_NAME} || fail 3 + ${ZFS} snapshot ${FULL_SNAP_NAME} || fail 4 + ${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail 5 + + # Verify the devices were created + stat /dev/zvol/${POOL_NAME} &>/dev/null || fail 6 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null || fail 7 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null || fail 8 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null || fail 9 + + # Unload the modules + ${ZFS_SH} -u || fail 10 + + # Verify the devices were removed + stat /dev/zvol/${POOL_NAME} &>/dev/null && fail 11 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null && fail 12 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null && fail 13 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null && fail 14 + + # Load the modules, wait 1 second for udev + ${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" && sleep 1 || fail 15 + + # Verify the devices were created + stat /dev/zvol/${POOL_NAME} &>/dev/null || fail 16 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null || fail 17 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null || fail 18 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null || fail 19 + + # Destroy the pool and consequently the devices + ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 -d || fail 20 + + # Verify the devices were removed + stat /dev/zvol/${POOL_NAME} &>/dev/null && fail 21 + stat /dev/zvol/${FULL_ZVOL_NAME} &>/dev/null && fail 22 + stat /dev/zvol/${FULL_SNAP_NAME} &>/dev/null && fail 23 + stat /dev/zvol/${FULL_CLONE_NAME} &>/dev/null && fail 24 + + ${ZFS_SH} -u || fail 25 + + pass +} +zconfig_test5 + exit 0 diff --git a/scripts/zpool-config/file-raid0.sh b/scripts/zpool-config/file-raid0.sh index 14429c43d9..5ec80b05c1 100644 --- a/scripts/zpool-config/file-raid0.sh +++ b/scripts/zpool-config/file-raid0.sh @@ -12,8 +12,8 @@ zpool_create() { for FILE in ${FILES}; do msg "Creating ${FILE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" done msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${FILES} diff --git a/scripts/zpool-config/file-raid10.sh b/scripts/zpool-config/file-raid10.sh index a632a4f4cd..ae7f0ae07b 100644 --- a/scripts/zpool-config/file-raid10.sh +++ b/scripts/zpool-config/file-raid10.sh @@ -13,8 +13,8 @@ zpool_create() { for FILE in ${FILES}; do msg "Creating ${FILE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" done msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} \ diff --git a/scripts/zpool-config/file-raidz.sh b/scripts/zpool-config/file-raidz.sh index 9302c85e97..5b6c3ea2c2 100644 --- a/scripts/zpool-config/file-raidz.sh +++ b/scripts/zpool-config/file-raidz.sh @@ -12,8 +12,8 @@ zpool_create() { for FILE in ${FILES}; do msg "Creating ${FILE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" done msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${FILES} diff --git a/scripts/zpool-config/file-raidz2.sh b/scripts/zpool-config/file-raidz2.sh index 681352783c..bc0e5ec8af 100644 --- a/scripts/zpool-config/file-raidz2.sh +++ b/scripts/zpool-config/file-raidz2.sh @@ -12,8 +12,8 @@ zpool_create() { for FILE in ${FILES}; do msg "Creating ${FILE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" done msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${FILES} diff --git a/scripts/zpool-config/lo-raid0.sh b/scripts/zpool-config/lo-raid0.sh index d37d5138f7..321d9b1f71 100644 --- a/scripts/zpool-config/lo-raid0.sh +++ b/scripts/zpool-config/lo-raid0.sh @@ -14,8 +14,8 @@ zpool_create() { DEVICE=`unused_loop_device` msg "Creating ${FILE} using loopback device ${DEVICE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" ${LOSETUP} ${DEVICE} ${FILE} || die "Error $? creating ${FILE} -> ${DEVICE} loopback" DEVICES="${DEVICES} ${DEVICE}" diff --git a/scripts/zpool-config/lo-raid10.sh b/scripts/zpool-config/lo-raid10.sh index 8d3672dd1b..f9c47cd1e1 100644 --- a/scripts/zpool-config/lo-raid10.sh +++ b/scripts/zpool-config/lo-raid10.sh @@ -16,8 +16,8 @@ zpool_create() { DEVICE=`unused_loop_device` msg "Creating ${FILE} using loopback device ${DEVICE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" ${LOSETUP} ${DEVICE} ${FILE} || die "Error $? creating ${FILE} -> ${DEVICE} loopback" DEVICES_M1="${DEVICES_M1} ${DEVICE}" @@ -27,8 +27,8 @@ zpool_create() { DEVICE=`unused_loop_device` msg "Creating ${FILE} using loopback device ${DEVICE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" ${LOSETUP} ${DEVICE} ${FILE} || die "Error $? creating ${FILE} -> ${DEVICE} loopback" DEVICES_M2="${DEVICES_M2} ${DEVICE}" diff --git a/scripts/zpool-config/lo-raidz.sh b/scripts/zpool-config/lo-raidz.sh index 6efcd1041a..509f6ee1d7 100644 --- a/scripts/zpool-config/lo-raidz.sh +++ b/scripts/zpool-config/lo-raidz.sh @@ -14,8 +14,8 @@ zpool_create() { DEVICE=`unused_loop_device` msg "Creating ${FILE} using loopback device ${DEVICE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" ${LOSETUP} ${DEVICE} ${FILE} || die "Error $? creating ${FILE} -> ${DEVICE} loopback" DEVICES="${DEVICES} ${DEVICE}" diff --git a/scripts/zpool-config/lo-raidz2.sh b/scripts/zpool-config/lo-raidz2.sh index f59c7f2d65..6e61293c0b 100644 --- a/scripts/zpool-config/lo-raidz2.sh +++ b/scripts/zpool-config/lo-raidz2.sh @@ -14,8 +14,8 @@ zpool_create() { DEVICE=`unused_loop_device` msg "Creating ${FILE} using loopback device ${DEVICE}" rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=256 &>/dev/null || - die "Error $? creating ${FILE}" + dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ + &>/dev/null || die "Error $? creating ${FILE}" ${LOSETUP} ${DEVICE} ${FILE} || die "Error $? creating ${FILE} -> ${DEVICE} loopback" DEVICES="${DEVICES} ${DEVICE}"