forked from Mirrors/btrfs-progs
btrfs-progs: extend balance args to take min/max limit filter
Add the overlapping limit and [limit_min, limit_max] members to the balance args. The min/max values are interpreted iff the corresponding flag BTRFS_BALANCE_ARGS_LIMIT_RANGE is set. The minimum and maximum are inclusive. Note that the values are only 32bit, but this should be enough for the foreseeable future. Signed-off-by: David Sterba <dsterba@suse.com>master
parent
ebb66f20ae
commit
45e9bf8098
|
@ -130,6 +130,12 @@ parameters.
|
||||||
Process only given number of chunks, after all filters are applied. This can be
|
Process only given number of chunks, after all filters are applied. This can be
|
||||||
used to specifically target a chunk in connection with other filters (drange,
|
used to specifically target a chunk in connection with other filters (drange,
|
||||||
vrange) or just simply limit the amount of work done by a single balance run.
|
vrange) or just simply limit the amount of work done by a single balance run.
|
||||||
|
+
|
||||||
|
The argument may be a single value or a range. The single value *N* means *at
|
||||||
|
most N chunks*, equivalent to *..N* range syntax. Kernels prior to 4.4 accept
|
||||||
|
only the single value format.
|
||||||
|
+
|
||||||
|
The range minimum and maximum are inclusive.
|
||||||
|
|
||||||
*soft*::
|
*soft*::
|
||||||
Takes no parameters. Only has meaning when converting between profiles.
|
Takes no parameters. Only has meaning when converting between profiles.
|
||||||
|
|
|
@ -347,6 +347,10 @@ static void dump_balance_args(struct btrfs_balance_args *args)
|
||||||
(unsigned long long)args->vend);
|
(unsigned long long)args->vend);
|
||||||
if (args->flags & BTRFS_BALANCE_ARGS_LIMIT)
|
if (args->flags & BTRFS_BALANCE_ARGS_LIMIT)
|
||||||
printf(", limit=%llu", (unsigned long long)args->limit);
|
printf(", limit=%llu", (unsigned long long)args->limit);
|
||||||
|
if (args->flags & BTRFS_BALANCE_ARGS_LIMIT_RANGE) {
|
||||||
|
printf(", limit=");
|
||||||
|
print_range_u32(args->limit_min, args->limit_max);
|
||||||
|
}
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
13
ioctl.h
13
ioctl.h
|
@ -227,7 +227,18 @@ struct btrfs_balance_args {
|
||||||
|
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
|
|
||||||
__u64 limit; /* limit number of processed chunks */
|
/*
|
||||||
|
* BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
|
||||||
|
* BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
|
||||||
|
* and maximum
|
||||||
|
*/
|
||||||
|
union {
|
||||||
|
__u64 limit; /* limit number of processed chunks */
|
||||||
|
struct {
|
||||||
|
__u32 limit_min;
|
||||||
|
__u32 limit_max;
|
||||||
|
};
|
||||||
|
};
|
||||||
__u64 unused[7];
|
__u64 unused[7];
|
||||||
} __attribute__ ((__packed__));
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
|
|
|
@ -136,6 +136,7 @@ struct map_lookup {
|
||||||
#define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
|
#define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
|
||||||
#define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
|
#define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
|
||||||
#define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
|
#define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
|
||||||
|
#define BTRFS_BALANCE_ARGS_LIMIT_RANGE (1ULL << 6)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Profile changing flags. When SOFT is set we won't relocate chunk if
|
* Profile changing flags. When SOFT is set we won't relocate chunk if
|
||||||
|
|
Loading…
Reference in New Issue