From bf3ae1575e4b008a3ea52d8efcc6485738210118 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 14 Nov 2005 23:43:43 +0000 Subject: add support to isys for device-mapper nodes --- isys/devnodes.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'isys/devnodes.c') diff --git a/isys/devnodes.c b/isys/devnodes.c index 7e268157e..8409fe907 100644 --- a/isys/devnodes.c +++ b/isys/devnodes.c @@ -3,8 +3,9 @@ * * Erik Troan * Matt Wilson + * Peter Jones * - * Copyright 1998-2001 Red Hat, Inc. + * Copyright 1998-2005 Red Hat, Inc. * Copyright 1996-1998 Red Hat Software, Inc. * * This software may be freely redistributed under the terms of the GNU @@ -25,6 +26,7 @@ #include #include #include +#include struct devnum { char * name; @@ -92,11 +94,38 @@ int devMakeInode(char * devName, char * path) { char *ptr; char *dir; - /* scsi devices sda - sdp: major 8, minor 0 - 255 */ - /* scsi devices sdq - sdaf: major 65, minor 0 - 255 */ - /* scsi devices sdqg - sdav: major 66, minor 0 - 255 */ - /* etc... */ - if (devName[0] == 's' && devName[1] == 'd') { + if (!strncmp(devName, "mapper/", 7)) { + struct dm_task *task; + struct dm_info *info = alloca(sizeof *info); + char *realName = devName + 7; + + if (!info || !*realName) + return -3; + memset(info, '\0', sizeof (*info)); + task = dm_task_create(DM_DEVICE_INFO); + if (!task) + return -3; + + dm_task_set_name(task, realName); + i = dm_task_run(task); + if (i < 0) { + dm_task_destroy(task); + return -3; + } + i = dm_task_get_info(task, info); + dm_task_destroy(task); + if (i < 0) { + return -3; + } + + type = S_IFBLK; + major = info->major; + minor = info->minor; + } else if (devName[0] == 's' && devName[1] == 'd') { + /* scsi devices sda - sdp: major 8, minor 0 - 255 */ + /* scsi devices sdq - sdaf: major 65, minor 0 - 255 */ + /* scsi devices sdqg - sdav: major 66, minor 0 - 255 */ + /* etc... */ int drive = 0; char *num = NULL; type = S_IFBLK; -- cgit