-void
-zvol_fini(void)
-{
- mutex_destroy(&zvol_state_lock);
- ddi_soft_state_fini(&zvol_state);
-}
-
-static boolean_t
-zvol_is_swap(zvol_state_t *zv)
-{
- vnode_t *vp;
- boolean_t ret = B_FALSE;
- char *devpath;
- size_t devpathlen;
- int error;
-
- devpathlen = strlen(ZVOL_FULL_DEV_DIR) + strlen(zv->zv_name) + 1;
- devpath = kmem_alloc(devpathlen, KM_SLEEP);
- (void) sprintf(devpath, "%s%s", ZVOL_FULL_DEV_DIR, zv->zv_name);
- error = lookupname(devpath, UIO_SYSSPACE, FOLLOW, NULLVPP, &vp);
- kmem_free(devpath, devpathlen);
-
- ret = !error && IS_SWAPVP(common_specvp(vp));
-
- if (vp != NULL)
- VN_RELE(vp);
-
- return (ret);
-}
-
-static int
-zvol_dump_init(zvol_state_t *zv, boolean_t resize)
-{
- dmu_tx_t *tx;
- int error = 0;
- objset_t *os = zv->zv_objset;
- nvlist_t *nv = NULL;
-
- ASSERT(MUTEX_HELD(&zvol_state_lock));
-
- tx = dmu_tx_create(os);
- dmu_tx_hold_zap(tx, ZVOL_ZAP_OBJ, TRUE, NULL);
- error = dmu_tx_assign(tx, TXG_WAIT);
- if (error) {
- dmu_tx_abort(tx);
- return (error);
- }
-
- /*
- * If we are resizing the dump device then we only need to
- * update the refreservation to match the newly updated
- * zvolsize. Otherwise, we save off the original state of the
- * zvol so that we can restore them if the zvol is ever undumpified.
- */
- if (resize) {
- error = zap_update(os, ZVOL_ZAP_OBJ,
- zfs_prop_to_name(ZFS_PROP_REFRESERVATION), 8, 1,
- &zv->zv_volsize, tx);
- } else {
- uint64_t checksum, compress, refresrv, vbs;
-
- error = dsl_prop_get_integer(zv->zv_name,
- zfs_prop_to_name(ZFS_PROP_COMPRESSION), &compress, NULL);
- error = error ? error : dsl_prop_get_integer(zv->zv_name,
- zfs_prop_to_name(ZFS_PROP_CHECKSUM), &checksum, NULL);
- error = error ? error : dsl_prop_get_integer(zv->zv_name,
- zfs_prop_to_name(ZFS_PROP_REFRESERVATION), &refresrv, NULL);
- error = error ? error : dsl_prop_get_integer(zv->zv_name,
- zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), &vbs, NULL);
-
- error = error ? error : zap_update(os, ZVOL_ZAP_OBJ,
- zfs_prop_to_name(ZFS_PROP_COMPRESSION), 8, 1,
- &compress, tx);
- error = error ? error : zap_update(os, ZVOL_ZAP_OBJ,
- zfs_prop_to_name(ZFS_PROP_CHECKSUM), 8, 1, &checksum, tx);
- error = error ? error : zap_update(os, ZVOL_ZAP_OBJ,
- zfs_prop_to_name(ZFS_PROP_REFRESERVATION), 8, 1,
- &refresrv, tx);
- error = error ? error : zap_update(os, ZVOL_ZAP_OBJ,
- zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), 8, 1,
- &vbs, tx);