Module Name: src Committed By: haad Date: Tue Dec 1 23:12:10 UTC 2009
Modified Files: src/external/gpl2/lvm2/lib/libdevmapper: netbsd-dm.h src/sys/dev/dm: dm.h dm_ioctl.c dm_target_error.c dm_target_linear.c dm_target_mirror.c dm_target_snapshot.c dm_target_stripe.c dm_target_zero.c netbsd-dm.h Log Message: Revert my commit which have added knowledge about dm targets to libdevmapper, this breaks abstraction. Because only lvmtools/lvmlib and device-mapper can have knowledge about target mapping and libdevmapper only passes requests from lvmtools to kernel and back. Bump major library and driver version. Requested by: yamt@ To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h cvs rdiff -u -r1.14 -r1.15 src/sys/dev/dm/dm.h src/sys/dev/dm/dm_ioctl.c cvs rdiff -u -r1.8 -r1.9 src/sys/dev/dm/dm_target_error.c \ src/sys/dev/dm/dm_target_zero.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/dm/dm_target_linear.c \ src/sys/dev/dm/dm_target_stripe.c cvs rdiff -u -r1.6 -r1.7 src/sys/dev/dm/dm_target_mirror.c cvs rdiff -u -r1.10 -r1.11 src/sys/dev/dm/dm_target_snapshot.c cvs rdiff -u -r1.4 -r1.5 src/sys/dev/dm/netbsd-dm.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h diff -u src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h:1.3 src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h:1.4 --- src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h:1.3 Tue Jun 9 18:24:02 2009 +++ src/external/gpl2/lvm2/lib/libdevmapper/netbsd-dm.h Tue Dec 1 23:12:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd-dm.h,v 1.3 2009/06/09 18:24:02 haad Exp $ */ +/* $NetBSD: netbsd-dm.h,v 1.4 2009/12/01 23:12:09 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -287,8 +287,6 @@ int nbsd_dm_add_uint(const char *, uint64_t, prop_dictionary_t); int nbsd_dm_add_str(const char *, char *, prop_dictionary_t ); -prop_dictionary_t nbsd_dm_parse_param(const char *, const char *); - struct dm_ioctl* nbsd_dm_dict_to_dmi(prop_dictionary_t, const int); #endif /* __LIB_DEVMAPPER__ */ Index: src/sys/dev/dm/dm.h diff -u src/sys/dev/dm/dm.h:1.14 src/sys/dev/dm/dm.h:1.15 --- src/sys/dev/dm/dm.h:1.14 Fri Jun 5 21:52:31 2009 +++ src/sys/dev/dm/dm.h Tue Dec 1 23:12:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm.h,v 1.14 2009/06/05 21:52:31 haad Exp $ */ +/* $NetBSD: dm.h,v 1.15 2009/12/01 23:12:09 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -51,8 +51,8 @@ #define DM_NAME_LEN 128 #define DM_UUID_LEN 129 -#define DM_VERSION_MAJOR 5 -#define DM_VERSION_MINOR 13 +#define DM_VERSION_MAJOR 6 +#define DM_VERSION_MINOR 15 #define DM_VERSION_PATCHLEVEL 0 /*** Internal device-mapper structures ***/ @@ -209,7 +209,7 @@ typedef struct dm_target { char name[DM_MAX_TYPE_NAME]; /* Initialize target_config area */ - int (*init)(dm_dev_t *, void **, prop_dictionary_t); + int (*init)(dm_dev_t *, void **, char *); /* Destroy target_config area */ int (*destroy)(dm_table_entry_t *); @@ -281,7 +281,7 @@ #define DM_MAX_PARAMS_SIZE 1024 /* dm_target_zero.c */ -int dm_target_zero_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_zero_init(dm_dev_t *, void**, char *); char * dm_target_zero_status(void *); int dm_target_zero_strategy(dm_table_entry_t *, struct buf *); int dm_target_zero_destroy(dm_table_entry_t *); @@ -289,7 +289,7 @@ int dm_target_zero_upcall(dm_table_entry_t *, struct buf *); /* dm_target_error.c */ -int dm_target_error_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_error_init(dm_dev_t *, void**, char *); char * dm_target_error_status(void *); int dm_target_error_strategy(dm_table_entry_t *, struct buf *); int dm_target_error_deps(dm_table_entry_t *, prop_array_t); @@ -297,7 +297,7 @@ int dm_target_error_upcall(dm_table_entry_t *, struct buf *); /* dm_target_linear.c */ -int dm_target_linear_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_linear_init(dm_dev_t *, void**, char *); char * dm_target_linear_status(void *); int dm_target_linear_strategy(dm_table_entry_t *, struct buf *); int dm_target_linear_deps(dm_table_entry_t *, prop_array_t); @@ -308,7 +308,7 @@ uint64_t atoi(const char *); /* dm_target_mirror.c */ -int dm_target_mirror_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_mirror_init(dm_dev_t *, void**, char *); char * dm_target_mirror_status(void *); int dm_target_mirror_strategy(dm_table_entry_t *, struct buf *); int dm_target_mirror_deps(dm_table_entry_t *, prop_array_t); @@ -316,7 +316,7 @@ int dm_target_mirror_upcall(dm_table_entry_t *, struct buf *); /* dm_target_stripe.c */ -int dm_target_stripe_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_stripe_init(dm_dev_t *, void**, char *); char * dm_target_stripe_status(void *); int dm_target_stripe_strategy(dm_table_entry_t *, struct buf *); int dm_target_stripe_deps(dm_table_entry_t *, prop_array_t); @@ -324,7 +324,7 @@ int dm_target_stripe_upcall(dm_table_entry_t *, struct buf *); /* dm_target_snapshot.c */ -int dm_target_snapshot_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_snapshot_init(dm_dev_t *, void**, char *); char * dm_target_snapshot_status(void *); int dm_target_snapshot_strategy(dm_table_entry_t *, struct buf *); int dm_target_snapshot_deps(dm_table_entry_t *, prop_array_t); @@ -332,7 +332,7 @@ int dm_target_snapshot_upcall(dm_table_entry_t *, struct buf *); /* dm snapshot origin driver */ -int dm_target_snapshot_orig_init(dm_dev_t *, void**, prop_dictionary_t); +int dm_target_snapshot_orig_init(dm_dev_t *, void**, char *); char * dm_target_snapshot_orig_status(void *); int dm_target_snapshot_orig_strategy(dm_table_entry_t *, struct buf *); int dm_target_snapshot_orig_deps(dm_table_entry_t *, prop_array_t); Index: src/sys/dev/dm/dm_ioctl.c diff -u src/sys/dev/dm/dm_ioctl.c:1.14 src/sys/dev/dm/dm_ioctl.c:1.15 --- src/sys/dev/dm/dm_ioctl.c:1.14 Wed Sep 9 22:38:49 2009 +++ src/sys/dev/dm/dm_ioctl.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_ioctl.c,v 1.14 2009/09/09 22:38:49 haad Exp $ */ +/* $NetBSD: dm_ioctl.c,v 1.15 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -682,20 +682,23 @@ prop_object_iterator_t iter; prop_array_t cmd_array; - prop_dictionary_t target_dict, param_dict; + prop_dictionary_t target_dict; const char *name, *uuid, *type; uint32_t flags, ret, minor; + char *str; + ret = 0; flags = 0; name = NULL; uuid = NULL; dmv = NULL; last_table = NULL; + str = NULL; -/* char *xml; + /* char *xml; xml = prop_dictionary_externalize(dm_dict); printf("%s\n",xml);*/ @@ -768,7 +771,8 @@ * null and therefore it should be checked before we try to * use it. */ - param_dict = prop_dictionary_get(target_dict, DM_TABLE_PARAMS); + prop_dictionary_get_cstring(target_dict, + DM_TABLE_PARAMS, (char**)&str); if (SLIST_EMPTY(tbl)) /* insert this table to head */ @@ -781,16 +785,19 @@ * therfore I have to pass it to target init * routine and parse parameters there. */ + if ((ret = target->init(dmv, &table_en->target_config, - param_dict)) != 0) { + str)) != 0) { dm_table_release(&dmv->table_head, DM_TABLE_INACTIVE); dm_table_destroy(&dmv->table_head, DM_TABLE_INACTIVE); - + free(str, M_TEMP); + dm_dev_unbusy(dmv); return ret; } last_table = table_en; + free(str, M_TEMP); } prop_object_iterator_release(iter); Index: src/sys/dev/dm/dm_target_error.c diff -u src/sys/dev/dm/dm_target_error.c:1.8 src/sys/dev/dm/dm_target_error.c:1.9 --- src/sys/dev/dm/dm_target_error.c:1.8 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/dm_target_error.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_target_error.c,v 1.8 2009/06/05 19:56:40 haad Exp $ */ +/* $NetBSD: dm_target_error.c,v 1.9 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -100,7 +100,7 @@ /* Init function called from dm_table_load_ioctl. */ int -dm_target_error_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_error_init(dm_dev_t *dmv, void **target_config, char *argv) { printf("Error target init function called!!\n"); Index: src/sys/dev/dm/dm_target_zero.c diff -u src/sys/dev/dm/dm_target_zero.c:1.8 src/sys/dev/dm/dm_target_zero.c:1.9 --- src/sys/dev/dm/dm_target_zero.c:1.8 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/dm_target_zero.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_target_zero.c,v 1.8 2009/06/05 19:56:40 haad Exp $ */ +/* $NetBSD: dm_target_zero.c,v 1.9 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -104,7 +104,7 @@ * target specific config area. */ int -dm_target_zero_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_zero_init(dm_dev_t *dmv, void **target_config, char *argv) { printf("Zero target init function called!!\n"); Index: src/sys/dev/dm/dm_target_linear.c diff -u src/sys/dev/dm/dm_target_linear.c:1.7 src/sys/dev/dm/dm_target_linear.c:1.8 --- src/sys/dev/dm/dm_target_linear.c:1.7 Wed Sep 9 22:38:49 2009 +++ src/sys/dev/dm/dm_target_linear.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_target_linear.c,v 1.7 2009/09/09 22:38:49 haad Exp $ */ +/* $NetBSD: dm_target_linear.c,v 1.8 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -43,7 +43,6 @@ #include <machine/int_fmtio.h> -#include "netbsd-dm.h" #include "dm.h" /* @@ -55,38 +54,42 @@ * @argv[1] is physical data offset. */ int -dm_target_linear_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_linear_init(dm_dev_t *dmv, void **target_config, char *params) { dm_target_linear_config_t *tlc; dm_pdev_t *dmp; - const char *device; - uint64_t offset; - - if (prop_dictionary_get_cstring_nocopy(dict, DM_TARGET_LINEAR_DEVICE, - &device) == false) - return EINVAL; - - if (prop_dictionary_get_uint64(dict, DM_TARGET_LINEAR_OFFSET, - &offset) == false) + char **ap, *argv[3]; + + if(params == NULL) return EINVAL; + + /* + * Parse a string, containing tokens delimited by white space, + * into an argument vector + */ + for (ap = argv; ap < &argv[2] && + (*ap = strsep(¶ms, " \t")) != NULL;) { + if (**ap != '\0') + ap++; + } + aprint_debug("Linear target init function called %s--%s!!\n", + argv[0], argv[1]); + /* Insert dmp to global pdev list */ - if ((dmp = dm_pdev_insert(device)) == NULL) + if ((dmp = dm_pdev_insert(argv[0])) == NULL) return ENOENT; - aprint_debug("Linear target init function called %s--%"PRIu64"!!\n", - device, offset); - if ((tlc = kmem_alloc(sizeof(dm_target_linear_config_t), KM_SLEEP)) == NULL) - return 1; + return ENOMEM; tlc->pdev = dmp; tlc->offset = 0; /* default settings */ /* Check user input if it is not leave offset as 0. */ - tlc->offset = offset; + tlc->offset = atoi(argv[1]); *target_config = tlc; @@ -105,17 +108,17 @@ { dm_target_linear_config_t *tlc; char *params; - tlc = target_config; - + tlc = target_config; + aprint_debug("Linear target status function called\n"); - if ((params = kmem_alloc(DM_MAX_PARAMS_SIZE, KM_SLEEP)) == NULL) + if ((params = kmem_alloc(DM_MAX_PARAMS_SIZE, KM_NOSLEEP)) == NULL) return NULL; aprint_normal("%s %"PRIu64, tlc->pdev->name, tlc->offset); - snprintf(params, DM_MAX_PARAMS_SIZE,"%s %"PRIu64, - tlc->pdev->name, tlc->offset); - + snprintf(params, DM_MAX_PARAMS_SIZE,"%s %"PRIu64, + tlc->pdev->name, tlc->offset); + return params; } Index: src/sys/dev/dm/dm_target_stripe.c diff -u src/sys/dev/dm/dm_target_stripe.c:1.7 src/sys/dev/dm/dm_target_stripe.c:1.8 --- src/sys/dev/dm/dm_target_stripe.c:1.7 Wed Sep 9 22:38:49 2009 +++ src/sys/dev/dm/dm_target_stripe.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/*$NetBSD: dm_target_stripe.c,v 1.7 2009/09/09 22:38:49 haad Exp $*/ +/*$NetBSD: dm_target_stripe.c,v 1.8 2009/12/01 23:12:10 haad Exp $*/ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -40,7 +40,6 @@ #include <sys/vnode.h> #include "dm.h" -#include "netbsd-dm.h" #ifdef DM_TARGET_MODULE /* @@ -109,44 +108,34 @@ * 0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0 */ int -dm_target_stripe_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_stripe_init(dm_dev_t *dmv, void **target_config, char *params) { dm_target_stripe_config_t *tsc; - prop_array_t dev_array; - prop_dictionary_t dev_dict1, dev_dict2; - - uint64_t stripes, chunk_size, offset1, offset2; - const char *device1, *device2; - - if (prop_dictionary_get_uint64(dict, DM_TARGET_STRIPE_STRIPES, - &stripes) == false) + size_t len; + char **ap, *argv[10]; + + if(params == NULL) return EINVAL; + + len = strlen(params) + 1; - if (prop_dictionary_get_uint64(dict, DM_TARGET_STRIPE_CHUNKSIZE, - &chunk_size) == false) - return EINVAL; - - dev_array = prop_dictionary_get(dict, DM_TARGET_STRIPE_DEVARRAY); + /* + * Parse a string, containing tokens delimited by white space, + * into an argument vector + */ + for (ap = argv; ap < &argv[9] && + (*ap = strsep(¶ms, " \t")) != NULL;) { + if (**ap != '\0') + ap++; + } - /* XXX Support for more than 2 devices */ - dev_dict1 = prop_array_get(dev_array, 0); - dev_dict2 = prop_array_get(dev_array, 1); + printf("Stripe target init function called!!\n"); - if(dev_dict2 == NULL || dev_dict1 == NULL) - return EINVAL; - - prop_dictionary_get_cstring_nocopy(dev_dict1, DM_TARGET_STRIPE_DEVICE, &device1); - prop_dictionary_get_uint64(dev_dict1, DM_TARGET_STRIPE_OFFSET, &offset1); - prop_dictionary_get_cstring_nocopy(dev_dict2, DM_TARGET_STRIPE_DEVICE, &device2); - prop_dictionary_get_uint64(dev_dict2, DM_TARGET_STRIPE_OFFSET, &offset2); - - aprint_debug("Stripe target init function called!!\n"); - - aprint_debug("Stripe target chunk size %"PRIu64" number of stripes %"PRIu64"\n", chunk_size, stripes); - aprint_debug("Stripe target device name %s -- offset %"PRIu64"\n", device1, offset1); - aprint_debug("Stripe target device name %s -- offset %"PRIu64"\n", device2, offset2); + printf("Stripe target chunk size %s number of stripes %s\n", argv[1], argv[0]); + printf("Stripe target device name %s -- offset %s\n", argv[2], argv[3]); + printf("Stripe target device name %s -- offset %s\n", argv[4], argv[5]); - if (stripes > MAX_STRIPES) + if (atoi(argv[0]) > MAX_STRIPES) return ENOTSUP; if ((tsc = kmem_alloc(sizeof(dm_target_stripe_config_t), KM_NOSLEEP)) @@ -154,18 +143,20 @@ return ENOMEM; /* Insert dmp to global pdev list */ - if ((tsc->stripe_devs[0].pdev = dm_pdev_insert(device1)) == NULL) + if ((tsc->stripe_devs[0].pdev = dm_pdev_insert(argv[2])) == NULL) return ENOENT; /* Insert dmp to global pdev list */ - if ((tsc->stripe_devs[1].pdev = dm_pdev_insert(device2)) == NULL) + if ((tsc->stripe_devs[1].pdev = dm_pdev_insert(argv[4])) == NULL) return ENOENT; - tsc->stripe_devs[0].offset = offset1; - tsc->stripe_devs[1].offset = offset2; + tsc->stripe_devs[0].offset = atoi(argv[3]); + tsc->stripe_devs[1].offset = atoi(argv[5]); - tsc->stripe_chunksize = chunk_size; - tsc->stripe_num = (uint8_t)stripes; + /* Save length of param string */ + tsc->params_len = len; + tsc->stripe_chunksize = atoi(argv[1]); + tsc->stripe_num = (uint8_t)atoi(argv[0]); *target_config = tsc; @@ -209,7 +200,7 @@ if (tsc == NULL) return 0; -/* aprint_debug("Stripe target read function called %" PRIu64 "!!\n", +/* printf("Stripe target read function called %" PRIu64 "!!\n", tlc->offset);*/ /* calculate extent of request */ Index: src/sys/dev/dm/dm_target_mirror.c diff -u src/sys/dev/dm/dm_target_mirror.c:1.6 src/sys/dev/dm/dm_target_mirror.c:1.7 --- src/sys/dev/dm/dm_target_mirror.c:1.6 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/dm_target_mirror.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/*$NetBSD: dm_target_mirror.c,v 1.6 2009/06/05 19:56:40 haad Exp $*/ +/*$NetBSD: dm_target_mirror.c,v 1.7 2009/12/01 23:12:10 haad Exp $*/ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -104,7 +104,7 @@ * 0 52428800 mirror clustered_disk 4 253:2 1024 UUID block_on_error 3 253:3 0 253:4 0 253:5 0 */ int -dm_target_mirror_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_mirror_init(dm_dev_t *dmv, void **target_config, char *argv) { printf("Mirror target init function called!!\n"); Index: src/sys/dev/dm/dm_target_snapshot.c diff -u src/sys/dev/dm/dm_target_snapshot.c:1.10 src/sys/dev/dm/dm_target_snapshot.c:1.11 --- src/sys/dev/dm/dm_target_snapshot.c:1.10 Sat Jun 20 09:57:26 2009 +++ src/sys/dev/dm/dm_target_snapshot.c Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_target_snapshot.c,v 1.10 2009/06/20 09:57:26 cegger Exp $ */ +/* $NetBSD: dm_target_snapshot.c,v 1.11 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -178,7 +178,7 @@ * snapshot_origin device, cow device, persistent flag, chunk size */ int -dm_target_snapshot_init(dm_dev_t *dmv, void **target_config, prop_dictionary_t dict) +dm_target_snapshot_init(dm_dev_t *dmv, void **target_config, char *params) { dm_target_snapshot_config_t *tsc; dm_pdev_t *dmp_snap, *dmp_cow; Index: src/sys/dev/dm/netbsd-dm.h diff -u src/sys/dev/dm/netbsd-dm.h:1.4 src/sys/dev/dm/netbsd-dm.h:1.5 --- src/sys/dev/dm/netbsd-dm.h:1.4 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/netbsd-dm.h Tue Dec 1 23:12:10 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd-dm.h,v 1.4 2009/06/05 19:56:40 haad Exp $ */ +/* $NetBSD: netbsd-dm.h,v 1.5 2009/12/01 23:12:10 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -208,17 +208,6 @@ #define DM_TABLE_STAT "status" #define DM_TABLE_LENGTH "length" #define DM_TABLE_PARAMS "params" - -#define DM_TARGET_LINEAR_DEVICE "device" -#define DM_TARGET_LINEAR_OFFSET "offset" - -#define DM_TARGET_STRIPE_DEVARRAY "device_array" -#define DM_TARGET_STRIPE_DEVICE "device" -#define DM_TARGET_STRIPE_OFFSET "offset" -#define DM_TARGET_STRIPE_STRIPES "stripes" -#define DM_TARGET_STRIPE_CHUNKSIZE "chunk_size" - - //#ifndef __LIB_DEVMAPPER__ //#define DM_TABLE_DEPS "deps" //#endif @@ -277,7 +266,7 @@ /* Types for nbsd_get_dm_major */ #define DM_CHAR_MAJOR 1 -#define DM_BLOCK_MAJOR 2 +#define DM_BLOCK_MAJOR 2 /* libdm_netbsd.c */ int nbsd_get_dm_major(uint32_t *, int); /* Get dm device major numbers */ @@ -287,8 +276,6 @@ int nbsd_dm_add_uint(const char *, uint64_t, prop_dictionary_t); int nbsd_dm_add_str(const char *, char *, prop_dictionary_t ); -prop_dictionary_t nbsd_dm_parse_param(const char *, char *); - struct dm_ioctl* nbsd_dm_dict_to_dmi(prop_dictionary_t, const int); #endif /* __LIB_DEVMAPPER__ */