[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH parted 2/4] linux: Use devicemapper task name instead of device n
From: |
Hans de Goede |
Subject: |
[PATCH parted 2/4] linux: Use devicemapper task name instead of device node name |
Date: |
Fri, 6 Nov 2009 17:50:50 +0100 |
Use devicemapper task name instead of device node name as basename for
devicemapper disk partitions.
This is needed for upcoming lvm changes where the /dev/mapper/foobar files are
becoming symlinks, so we will end up opening /dev/dm-#, and naming our
partitions dm-#p1, dm-#p2, instead of foobarp1, foobarp2, etc.
---
libparted/arch/linux.c | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index c87a7ca..0d471ab 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2400,36 +2400,38 @@ err:
static int
_dm_add_partition (PedDisk* disk, PedPartition* part)
{
- struct stat dev_stat;
struct dm_task* task = NULL;
int rc;
char* vol_name = NULL;
- char* dev_name = NULL;
+ const char* dev_name = NULL;
char* params = NULL;
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
if (!_has_partitions(disk))
return 0;
- dev_name = _device_get_part_path (disk->dev, part->num);
- if (!dev_name)
- return 0;
+ /* Get map name from devicemapper */
+ task = dm_task_create(DM_DEVICE_INFO);
+ if (!task)
+ goto err;
- vol_name = strrchr (dev_name, '/');
- if (vol_name && *vol_name && *(++vol_name))
- vol_name = strdup (vol_name);
- else
- vol_name = strdup (dev_name);
- if (!vol_name)
- return 0;
+ if (!dm_task_set_major_minor(task, arch_specific->major,
+ arch_specific->minor, 0))
+ goto err;
- if (!_device_stat (disk->dev, &dev_stat))
+ rc = dm_task_run(task);
+ if (rc < 0)
goto err;
- if (asprintf (¶ms, "%d:%d %lld", major (dev_stat.st_rdev),
- minor (dev_stat.st_rdev), part->geom.start) == -1)
+ dev_name = dm_task_get_name(task);
+ dm_task_destroy (task);
+ task = NULL;
+
+ if (asprintf (&vol_name, "%sp%d", dev_name, part->num) == -1)
goto err;
- if (!params)
+ if (asprintf (¶ms, "%d:%d %lld", arch_specific->major,
+ arch_specific->minor, part->geom.start) == -1)
goto err;
task = dm_task_create (DM_DEVICE_CREATE);
--
1.6.5.2