|
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
|