]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
btrfs: Explicitly reserve space for devreplace item
authorNikolay Borisov <nborisov@suse.com>
Tue, 14 May 2019 10:54:43 +0000 (13:54 +0300)
committerDavid Sterba <dsterba@suse.com>
Mon, 1 Jul 2019 11:34:54 +0000 (13:34 +0200)
Part of device replace involves writing an item to the device root
containing information about pending replace operations. Currently space
for this item is not being explicitly reserved so this works thanks to
presence of global reserve. While not fatal it's not a good practice.
Let's be explicit about space requirement of device replace and reserve
space when starting the transaction.

Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/dev-replace.c

index 94f000b0ca792c7dcf28044683f49df060054f52..45c5ba7d80ed4019b9f2d641de05662db0b9b9f4 100644 (file)
@@ -477,8 +477,8 @@ static int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
 
        btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1);
 
-       /* force writing the updated state information to disk */
-       trans = btrfs_start_transaction(root, 0);
+       /* Commit dev_replace state and reserve 1 item for it. */
+       trans = btrfs_start_transaction(root, 1);
        if (IS_ERR(trans)) {
                ret = PTR_ERR(trans);
                down_write(&dev_replace->rwsem);