Subject: bug#15348: [PATCH 11/19] libparted: don't canonicalize /dev/md/ paths (#872361)

From: Phillip Susi <[email-masked]>
Date: Wed, 25 Sep 2013 11:56:52 -0400

I still think this section of code is wrong for two reasons:

1)  It should not skip canonicalization, but rather do it correctly
2)  It should not be based on the path given, but on the dev_t

Examples:

parted /dev/disk/by-id/xxxxx print
parted /dev/vg/lv print

Because the string does not start with /dev/mapper, it is
canonicalized to /dev/dm-x.  Instead it should notice the dev_t major
is device mapper, and use the dm api to read the name and append it to
"/dev/mapper" for the official name.

On 9/11/2013 3:25 PM, Brian C. Lane wrote:
> From: "Brian C. Lane" <[email-masked]>
> 
> This is the same issue we have with /dev/mapper/ paths that was
> fixed in commit c1eb485b9fd8919e18f192d678bc52b0488e6ee0. When
> libparted is used to setup the device the symlink should be used to
> reference it, not the backing device name which could change.
> 
> * libparted/device.c (ped_device_get): Don't canonicalize names 
> that start with "/dev/md/". --- libparted/device.c | 7 +++++-- 1
> file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/libparted/device.c b/libparted/device.c index
> 738b320..cdcc117 100644 --- a/libparted/device.c +++
> b/libparted/device.c @@ -152,8 +152,11 @@ ped_device_get (const
> char* path) char*		normal_path = NULL;
> 
> PED_ASSERT (path != NULL); -	/* Don't canonicalize /dev/mapper
> paths, see tests/symlink.c */ -	if (strncmp (path, "/dev/mapper/",
> 12)) +	/* Don't canonicalize /dev/mapper or /dev/md/ paths, see +
> tests/symlink.c +	*/ +	if (strncmp (path, "/dev/mapper/", 12) && +
> strncmp (path, "/dev/md/", 8)) normal_path = canonicalize_file_name
> (path); if (!normal_path) /* Well, maybe it is just that the file
> does not exist.
>