mschorm / rpms / util-linux

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