- size_t i;
- for (i = 0; lvs[i] != NULL; ++i) {
- r = stat (lvs[i], &stat2);
+ while (1) {
+ errno = 0;
+ d = readdir (dir);
+ if (d == NULL) break;
+
+ /* Ignore . and .. */
+ if (STREQ (d->d_name, ".") || STREQ (d->d_name, ".."))
+ continue;
+
+ /* Ignore /dev/mapper/control which is used internally by dm. */
+ if (STREQ (d->d_name, "control"))
+ continue;
+
+ size_t len = strlen (d->d_name);
+ char devname[len+64];
+
+ snprintf (devname, len+64, "/dev/mapper/%s", d->d_name);
+
+ /* Ignore dm devices which are LVs. */
+ r = lv_canonical (devname, NULL);