Add mkfs.btrfs -A offset to control allocation start on devices

This is a utility option for the resizer, it makes sure to allocate
at offset bytes in the disk or higher.  It ensures the resizer will have
something to move when testing it.
master
Chris Mason 2008-04-25 16:55:21 -04:00 committed by David Woodhouse
parent 4415143185
commit 083faf794f
3 changed files with 12 additions and 1 deletions

View File

@ -501,6 +501,7 @@ struct btrfs_fs_info {
u64 data_alloc_profile;
u64 metadata_alloc_profile;
u64 system_alloc_profile;
u64 alloc_start;
struct btrfs_trans_handle *running_transaction;
struct btrfs_super_block super_copy;

8
mkfs.c
View File

@ -280,6 +280,7 @@ static char *parse_label(char *input)
}
static struct option long_options[] = {
{ "alloc-start", 1, NULL, 'A'},
{ "byte-count", 1, NULL, 'b' },
{ "leafsize", 1, NULL, 'l' },
{ "label", 1, NULL, 'L'},
@ -300,6 +301,7 @@ int main(int ac, char **av)
u64 block_count = 0;
u64 dev_block_count = 0;
u64 blocks[6];
u64 alloc_start;
u64 metadata_profile = BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_DUP;
u64 data_profile = BTRFS_BLOCK_GROUP_RAID0;
u32 leafsize = getpagesize();
@ -315,11 +317,14 @@ int main(int ac, char **av)
while(1) {
int c;
c = getopt_long(ac, av, "b:l:n:s:m:d:L:", long_options,
c = getopt_long(ac, av, "A:b:l:n:s:m:d:L:", long_options,
&option_index);
if (c < 0)
break;
switch(c) {
case 'A':
alloc_start = parse_size(optarg);
break;
case 'd':
data_profile = parse_profile(optarg);
break;
@ -397,6 +402,7 @@ int main(int ac, char **av)
exit(1);
}
root = open_ctree(file, 0);
root->fs_info->alloc_start = alloc_start;
trans = btrfs_start_transaction(root, 1);
if (ac == 0)

View File

@ -252,6 +252,10 @@ static int find_free_dev_extent(struct btrfs_trans_handle *trans,
* so we make sure to start at an offset of at least 1MB
*/
search_start = max((u64)1024 * 1024, search_start);
if (root->fs_info->alloc_start + num_bytes <= device->total_bytes)
search_start = max(root->fs_info->alloc_start, search_start);
key.objectid = device->devid;
key.offset = search_start;
key.type = BTRFS_DEV_EXTENT_KEY;