run_scheduled_bios(device);
 }
 
-
-static void btrfs_free_stale_devices(struct btrfs_device *skip_dev)
+/*
+ *  Search and remove all stale (devices which are not mounted) devices.
+ *  When both inputs are NULL, it will search and release all stale devices.
+ *  path:      Optional. When provided will it release all unmounted devices
+ *             matching this path only.
+ *  skip_dev:  Optional. Will skip this device when searching for the stale
+ *             devices.
+ */
+static void btrfs_free_stale_devices(const char *path,
+                                    struct btrfs_device *skip_dev)
 {
        struct btrfs_fs_devices *fs_devs, *tmp_fs_devs;
        struct btrfs_device *dev, *tmp_dev;
                                         &fs_devs->devices, dev_list) {
                        int not_found = 0;
 
-                       if (skip_dev && (skip_dev == dev || !dev->name))
+                       if (skip_dev && skip_dev == dev)
+                               continue;
+                       if (path && !dev->name)
                                continue;
 
-                       /*
-                        * Todo: This won't be enough. What if the same device
-                        * comes back (with new uuid and) with its mapper path?
-                        * But for now, this does help as mostly an admin will
-                        * either use mapper or non mapper path throughout.
-                        */
                        rcu_read_lock();
-                       if (skip_dev)
+                       if (path)
                                not_found = strcmp(rcu_str_deref(dev->name),
-                                                  rcu_str_deref(skip_dev->name));
+                                                  path);
                        rcu_read_unlock();
                        if (not_found)
                                continue;
 
                ret = 1;
                device->fs_devices = fs_devices;
-               btrfs_free_stale_devices(device);
+               btrfs_free_stale_devices(path, device);
        } else if (!device->name || strcmp(device->name->str, path)) {
                /*
                 * When FS is already mounted.