/* * Get target deps and add them to prop_array_t. */ int dm_target_snapshot_orig_deps(dm_table_entry_t * table_en, prop_array_t prop_array) { dm_target_snapshot_origin_config_t *tsoc; struct vattr va; int error; if (table_en->target_config == NULL) return 0; tsoc = table_en->target_config; vn_lock(tsoc->tsoc_real_dev->pdev_vnode, LK_SHARED | LK_RETRY); error = VOP_GETATTR(tsoc->tsoc_real_dev->pdev_vnode, &va, curlwp->l_cred); VOP_UNLOCK(tsoc->tsoc_real_dev->pdev_vnode); if (error != 0) return error; prop_array_add_uint64(prop_array, (uint64_t) va.va_rdev); return 0; }
/* Add this target pdev dependiences to prop_array_t */ static int dm_target_linear_deps(dm_table_entry_t * table_en, prop_array_t prop_array) { dm_target_linear_config_t *tlc; struct vattr va; int error; if (table_en->target_config == NULL) return ENOENT; tlc = table_en->target_config; if ((error = VOP_GETATTR(tlc->pdev->pdev_vnode, &va)) != 0) return error; prop_array_add_uint64(prop_array, (uint64_t) makeudev(va.va_rmajor, va.va_rminor)); return 0; }
/* * Generate properties from stripe table entry. */ static int dm_target_stripe_deps(dm_table_entry_t *table_en, prop_array_t prop_array) { dm_target_stripe_config_t *tsc; struct vattr va; int error; int n; if (table_en->target_config == NULL) return ENOENT; tsc = table_en->target_config; error = 0; for (n = 0; n < tsc->stripe_num; ++n) { error = VOP_GETATTR(tsc->stripe_devs[n].pdev->pdev_vnode, &va); if (error) break; prop_array_add_uint64(prop_array, (uint64_t)makeudev(va.va_rmajor, va.va_rminor)); } return (error); }