Hi Anand,

On 06/13/2014 12:26 PM, Anand Jain wrote:
<..snip..>
@@ -523,6 +523,16 @@ static noinline int device_list_add(const char *path,
if (fs_devices->opened)
                        return -EBUSY;
+               else {
+                       /*
+                        * That is if the FS is _not_ mounted and if you are 
here, that
+                        * means there is more than one disk with same uuid and 
devid.
+                        * We keep the one with larger generation number or the 
last-in
+                        * if generation are equal.
+                        */
+                       if (found_transid < device->generation)
+                               return -EINVAL;
+               }
I tried this patch it outputed the following message if it encounter two device with the same uuid and device id:

Scanning for Btrfs filesystems
ERROR: device scan failed '/dev/sdc' - Invalid argument

Same comment as your first patch here.
name = rcu_string_strdup(path, GFP_NOFS);
                if (!name)
@@ -535,6 +545,15 @@ static noinline int device_list_add(const char *path,
                }
        }
+ /*
+        * Unmount does not free the btrfs_device struct but would zero
+        * generation along with most of the other members. So just update
+        * it back. We need it to pick the disk with largest generation
+        * (as above).
+        */
+       if (!fs_devices->opened)
+               device->generation = found_transid;
+
        if (found_transid > fs_devices->latest_trans) {
                fs_devices->latest_devid = devid;
                fs_devices->latest_trans = found_transid;

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to