btrfs: make btrfs_free_stale_devices() argument optional
authorAnand Jain <Anand.Jain@oracle.com>
Thu, 18 Jan 2018 14:00:35 +0000 (22:00 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 22 Jan 2018 19:25:48 +0000 (20:25 +0100)
This updates btrfs_free_stale_devices() helper function to delete all
unmouted devices, when arg is NULL.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c

index 207014fce7ea3042fceeefda99403ea3b26cc06a..9712377862d9c7ffd06fd69153ef94820da0e629 100644 (file)
@@ -610,9 +610,6 @@ static void btrfs_free_stale_devices(struct btrfs_device *cur_dev)
        struct btrfs_fs_devices *fs_devs, *tmp_fs_devs;
        struct btrfs_device *dev, *tmp_dev;
 
-       if (!cur_dev->name)
-               return;
-
        list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) {
 
                if (fs_devs->opened)
@@ -620,11 +617,9 @@ static void btrfs_free_stale_devices(struct btrfs_device *cur_dev)
 
                list_for_each_entry_safe(dev, tmp_dev,
                                         &fs_devs->devices, dev_list) {
-                       int not_found;
+                       int not_found = 0;
 
-                       if (dev == cur_dev)
-                               continue;
-                       if (!dev->name)
+                       if (cur_dev && (cur_dev == dev || !dev->name))
                                continue;
 
                        /*
@@ -634,8 +629,9 @@ static void btrfs_free_stale_devices(struct btrfs_device *cur_dev)
                         * either use mapper or non mapper path throughout.
                         */
                        rcu_read_lock();
-                       not_found = strcmp(rcu_str_deref(dev->name),
-                                               rcu_str_deref(cur_dev->name));
+                       if (cur_dev)
+                               not_found = strcmp(rcu_str_deref(dev->name),
+                                                  rcu_str_deref(cur_dev->name));
                        rcu_read_unlock();
                        if (not_found)
                                continue;