From 5916a4f138bdd08fbc942bc4d129daf7b7bad3c9 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Fri, 12 Aug 2011 14:04:44 -0400 Subject: [PATCH] Use /dev/mapper/$DM_NAME as fallback, if available This ensures that PreferredDeviceFile will be /dev/mapper/sd_card instead of e.g. /dev/dm-3 if DM_NAME is "sd_card". Signed-off-by: David Zeuthen --- src/udiskslinuxblock.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c index abc3a48..75c4368 100644 --- a/src/udiskslinuxblock.c +++ b/src/udiskslinuxblock.c @@ -1739,26 +1739,38 @@ block_device_update (UDisksLinuxBlock *block, * a name of the form dm-%d and a symlink name conveys more * information. */ - preferred_device_file = g_udev_device_get_device_file (block->device); + preferred_device_file = NULL; if (g_str_has_prefix (device_file, "/dev/dm-")) { guint n; + const gchar *dm_name; + gchar *dm_name_dev_file = NULL; + const gchar *dm_name_dev_file_as_symlink = NULL; + + dm_name = g_udev_device_get_property (block->device, "DM_NAME"); + if (dm_name != NULL) + dm_name_dev_file = g_strdup_printf ("/dev/mapper/%s", dm_name); for (n = 0; symlinks != NULL && symlinks[n] != NULL; n++) { - if (g_str_has_prefix (symlinks[n], "/dev/mapper/mpath")) + if (g_str_has_prefix (symlinks[n], "/dev/vg_")) { - /* multipath */ + /* LVM2 */ preferred_device_file = symlinks[n]; break; } - else if (g_str_has_prefix (symlinks[n], "/dev/mapper/vg_")) + else if (g_strcmp0 (symlinks[n], dm_name_dev_file) == 0) { - /* LVM2 */ - preferred_device_file = symlinks[n]; - break; + dm_name_dev_file_as_symlink = symlinks[n]; } } + /* fall back to /dev/mapper/$DM_NAME, if available as a symlink */ + if (preferred_device_file == NULL && dm_name_dev_file_as_symlink != NULL) + preferred_device_file = dm_name_dev_file_as_symlink; + g_free (dm_name_dev_file); } + /* fallback to the device name */ + if (preferred_device_file == NULL) + preferred_device_file = g_udev_device_get_device_file (block->device); udisks_block_device_set_preferred_device (iface, preferred_device_file); /* Determine the drive this block device belongs to -- 2.7.4