diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2012-01-16 21:04:48 +0100 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2012-01-16 21:04:48 +0100 |
commit | 596410151ed71819b9e8a8018c6c9992796b256d (patch) | |
tree | ff697d01a6dd8cf50b37b3855e40764335be044d /fs/btrfs/volumes.h | |
parent | Btrfs: save balance parameters to disk (diff) | |
download | linux-596410151ed71819b9e8a8018c6c9992796b256d.tar.xz linux-596410151ed71819b9e8a8018c6c9992796b256d.zip |
Btrfs: recover balance on mount
On mount, if balance item is found, resume balance in a separate
kernel thread.
Try to be smart to continue roughly where previous balance (or convert)
was interrupted. For chunk types that were being converted to some
profile we turn on soft convert, in case of a simple balance we turn on
usage filter and relocate only less-than-90%-full chunks of that type.
These are just heuristics but they help quite a bit, and can be improved
in future.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/btrfs/volumes.h')
-rw-r--r-- | fs/btrfs/volumes.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index 6c143c98017a..cd25ea58ec35 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -198,6 +198,7 @@ struct map_lookup { BTRFS_BALANCE_METADATA) #define BTRFS_BALANCE_FORCE (1ULL << 3) +#define BTRFS_BALANCE_RESUME (1ULL << 4) /* * Balance filters @@ -271,6 +272,7 @@ int btrfs_shrink_device(struct btrfs_device *device, u64 new_size); int btrfs_init_new_device(struct btrfs_root *root, char *path); int btrfs_balance(struct btrfs_balance_control *bctl, struct btrfs_ioctl_balance_args *bargs); +int btrfs_recover_balance(struct btrfs_root *tree_root); int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset); int find_free_dev_extent(struct btrfs_trans_handle *trans, struct btrfs_device *device, u64 num_bytes, |