btrfs-progs: image: introduce symbolic names for the sanitization modes
[platform/upstream/btrfs-progs.git] / volumes.c
index 2209e5a..2fde476 100644 (file)
--- a/volumes.c
+++ b/volumes.c
@@ -138,7 +138,21 @@ static int device_list_add(const char *path,
                list_add(&device->dev_list, &fs_devices->devices);
                device->fs_devices = fs_devices;
        } else if (!device->name || strcmp(device->name, path)) {
-               char *name = strdup(path);
+               char *name;
+
+               /*
+                * The existing device has newer generation, so this one could
+                * be a stale one, don't add it.
+                */
+               if (found_transid < device->generation) {
+                       warning(
+       "adding device %s gen %llu but found an existing device %s gen %llu",
+                               path, found_transid, device->name,
+                               device->generation);
+                       return -EEXIST;
+               }
+
+               name = strdup(path);
                 if (!name)
                         return -ENOMEM;
                 kfree(device->name);