Btrfs: close all bdevs on mount failure
authorIlya Dryomov <idryomov@gmail.com>
Wed, 19 Oct 2011 21:06:20 +0000 (00:06 +0300)
committerDavid Sterba <dsterba@suse.cz>
Thu, 20 Oct 2011 16:20:57 +0000 (18:20 +0200)
Fix a bug introduced by 20b45077.  We have to return EINVAL on mount
failure, but doing that too early in the sequence leaves all of the
devices opened exclusively.  This also fixes an issue where under some
scenarios only a second mount -o degraded <devices> command would
succeed.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/btrfs/volumes.c

index e138af710de2d0bcb738eea7380c46940dde9f0a..c6938b45e0fd42caeb8fd88b940496843d031d43 100644 (file)
@@ -597,10 +597,8 @@ static int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
                set_blocksize(bdev, 4096);
 
                bh = btrfs_read_dev_super(bdev);
-               if (!bh) {
-                       ret = -EINVAL;
+               if (!bh)
                        goto error_close;
-               }
 
                disk_super = (struct btrfs_super_block *)bh->b_data;
                devid = btrfs_stack_device_id(&disk_super->dev_item);
@@ -655,7 +653,7 @@ error:
                continue;
        }
        if (fs_devices->open_devices == 0) {
-               ret = -EIO;
+               ret = -EINVAL;
                goto out;
        }
        fs_devices->seeding = seeding;