/*
 * 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;
}
Пример #2
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;
}
Пример #3
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);
}