4.9-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Adam Borowski <[email protected]>


[ Upstream commit 14506127979a5a3d0c5d9b4cc76ce9d4ec23b717 ]

If your filesystem has, eg, data:raid0 metadata:raid1, and you run "btrfs
balance -dconvert=raid1", the meta.target field will be uninitialized.
That's otherwise ok, as it's unused except for this warning.

Thus, let's use the existing set of raid levels for the comparison.

As a side effect, non-convert balances will now nag about data>metadata.

Signed-off-by: Adam Borowski <[email protected]>
Reviewed-by: Liu Bo <[email protected]>
Signed-off-by: David Sterba <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 fs/btrfs/volumes.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3765,6 +3765,7 @@ int btrfs_balance(struct btrfs_balance_c
                  struct btrfs_ioctl_balance_args *bargs)
 {
        struct btrfs_fs_info *fs_info = bctl->fs_info;
+       u64 meta_target, data_target;
        u64 allowed;
        int mixed = 0;
        int ret;
@@ -3861,11 +3862,16 @@ int btrfs_balance(struct btrfs_balance_c
                }
        } while (read_seqretry(&fs_info->profiles_lock, seq));
 
-       if (btrfs_get_num_tolerated_disk_barrier_failures(bctl->meta.target) <
-               
btrfs_get_num_tolerated_disk_barrier_failures(bctl->data.target)) {
+       /* if we're not converting, the target field is uninitialized */
+       meta_target = (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
+               bctl->meta.target : fs_info->avail_metadata_alloc_bits;
+       data_target = (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
+               bctl->data.target : fs_info->avail_data_alloc_bits;
+       if (btrfs_get_num_tolerated_disk_barrier_failures(meta_target) <
+               btrfs_get_num_tolerated_disk_barrier_failures(data_target)) {
                btrfs_warn(fs_info,
                           "metadata profile 0x%llx has lower redundancy than 
data profile 0x%llx",
-                          bctl->meta.target, bctl->data.target);
+                          meta_target, data_target);
        }
 
        if (bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) {


Reply via email to