--- util-linux-2.12a/mount/mount_by_label.c.old 2004-08-11 22:25:06.000000000 +0100 +++ util-linux-2.12a/mount/mount_by_label.c 2004-08-11 22:25:21.000000000 +0100 @@ -17,6 +17,8 @@ * - Added JFS v2 format support * 2002-07-26 Luciano Chavez * - Added EVMS support + * 2004-08-11 Alasdair Kergon + * - Added LVM2/device-mapper support */ #include @@ -38,6 +40,7 @@ #define VG_DIR "/proc/lvm/VGs" #define EVMS_VOLUME_NAME_SIZE 127 #define PROC_EVMS_VOLUMES "/proc/evms/volumes" +#define DEVICEMAPPERDIR "/dev/mapper" static struct uuidCache_s { struct uuidCache_s *next; @@ -101,6 +104,34 @@ closedir(vg_dir); } +/* LVM2/device-mapper support */ +static void +uuidcache_init_dm(void) { + char lvm_device[PATH_MAX]; + DIR *d; + struct dirent *lv_iter; + char uuid[16], *label; + + if (!(d = opendir(DEVICEMAPPERDIR))) { + if (errno != ENOENT) + perror("mount (init_dm)"); + return; + } + + while ((lv_iter = readdir(d))) { + if (!strcmp(lv_iter->d_name, "control") || + !strcmp(lv_iter->d_name, ".") || + !strcmp(lv_iter->d_name, "..")) + continue; + snprintf(lvm_device, sizeof(lvm_device), "%s/%s", + DEVICEMAPPERDIR, lv_iter->d_name); + if (!get_label_uuid(strdup(lvm_device), &label, uuid)) + uuidcache_addentry(strdup(lvm_device), + label, uuid); + } + closedir(d); +} + static int uuidcache_init_evms(void) { FILE *procvol; @@ -250,6 +281,8 @@ fclose(procpt); uuidcache_init_lvm(); + + uuidcache_init_dm(); } #define UUID 1