From a7b8dcdd124908d3679c4fbc2269907cb7a0b5b7 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Tue, 15 Sep 2009 09:47:24 -0500 Subject: [PATCH] libdisk: use major/minor when calling dmsetup In RH bugzilla, [Bug 471102] Error message seen during mkfs.xfs on multipath device (unfortunately marked private) reports problems when making xfs fileystems on multipath devices: # mkfs -t xfs -f /dev/mpath/oramp4 dm_task_set_name: Device /dev/dm-12 not found Command failed dm_task_set_name: Device /dev/dm-12 not found Command failed meta-data=/dev/mpath/oramp4 isize=256 agcount=4, agsize=2359680 blks ... This is because dmsetup takes a "name" which is sometimes, but not always (I think) the same as the device name. dmsetup also can take major/minor as arguments, so this may be simpler at this point. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig --- libdisk/dm.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libdisk/dm.c b/libdisk/dm.c index fd91164ba..dfc1f375b 100644 --- a/libdisk/dm.c +++ b/libdisk/dm.c @@ -36,10 +36,11 @@ dm_get_subvol_stripe( { int count, stripes = 0, stripesize = 0; int dmpipe[2]; - char *dpath, *largv[4], tmppath[PATH_MAX]; + char *largv[7]; FILE *stream; long long offset, size; static char *command = "table"; /* dmsetup table /dev/xxx */ + char major_str[4], minor_str[4]; if (!mnt_is_dm_subvol(sb->st_rdev)) return 0; @@ -57,16 +58,15 @@ dm_get_subvol_stripe( return 0; } - if (!(dpath = realpath(dfile, tmppath))) { - fprintf(stderr, - _("Warning - device mapper device, but cannot resolve path %s: %s\n"), - dfile, strerror(errno)); - return 0; - } + snprintf(major_str, 4, "%d", major(sb->st_rdev)); + snprintf(minor_str, 4, "%d", minor(sb->st_rdev)); largv[1] = command; - largv[2] = dpath; - largv[3] = NULL; + largv[2] = "-j"; + largv[3] = major_str; + largv[4] = "-m"; + largv[5] = minor_str; + largv[6] = NULL; /* Open pipe */ if (pipe(dmpipe) < 0) { -- 2.47.2