|
Josef Bacik |
b5e03c |
From cbe7ca77431c40bab80135c7b8ee6a5dece56e03 Mon Sep 17 00:00:00 2001
|
|
Josef Bacik |
b5e03c |
From: Josef Bacik <jbacik@fusionio.com>
|
|
Josef Bacik |
b5e03c |
Date: Fri, 27 Jul 2012 08:24:37 -0400
|
|
Josef Bacik |
b5e03c |
Subject: [PATCH 3/3] Btrfs-progs: only enforce a maximum size if we specify
|
|
Josef Bacik |
b5e03c |
one
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
My patch
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
04609add88ef8428d725de6ef60f46a3ff0dbc8e
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
introduced a regression where if you mkfs'ed a group of disks with different
|
|
Josef Bacik |
b5e03c |
sizes it limited the disks to the size of the first one that is specified.
|
|
Josef Bacik |
b5e03c |
This was not the intent of my patch, I only want it to limit the size based
|
|
Josef Bacik |
b5e03c |
on the -b option, so I've reworked the code to pass in a max block count and
|
|
Josef Bacik |
b5e03c |
that fixes the issue. Thanks,
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
|
|
Josef Bacik |
b5e03c |
---
|
|
Josef Bacik |
b5e03c |
btrfs-vol.c | 3 ++-
|
|
Josef Bacik |
b5e03c |
cmds-device.c | 3 ++-
|
|
Josef Bacik |
b5e03c |
mkfs.c | 15 ++++++---------
|
|
Josef Bacik |
b5e03c |
utils.c | 12 +++---------
|
|
Josef Bacik |
b5e03c |
utils.h | 6 ++----
|
|
Josef Bacik |
b5e03c |
5 files changed, 15 insertions(+), 24 deletions(-)
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
diff --git a/btrfs-vol.c b/btrfs-vol.c
|
|
Josef Bacik |
b5e03c |
index 0efdbc1..ad824bd 100644
|
|
Josef Bacik |
b5e03c |
--- a/btrfs-vol.c
|
|
Josef Bacik |
b5e03c |
+++ b/btrfs-vol.c
|
|
Josef Bacik |
b5e03c |
@@ -150,7 +150,8 @@ int main(int ac, char **av)
|
|
Josef Bacik |
b5e03c |
if (cmd == BTRFS_IOC_ADD_DEV) {
|
|
Josef Bacik |
b5e03c |
int mixed = 0;
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
- ret = btrfs_prepare_device(devfd, device, 1, &dev_block_count, &mixed);
|
|
Josef Bacik |
b5e03c |
+ ret = btrfs_prepare_device(devfd, device, 1, &dev_block_count,
|
|
Josef Bacik |
b5e03c |
+ 0, &mixed, 0);
|
|
Josef Bacik |
b5e03c |
if (ret) {
|
|
Josef Bacik |
b5e03c |
fprintf(stderr, "Unable to init %s\n", device);
|
|
Josef Bacik |
b5e03c |
exit(1);
|
|
Josef Bacik |
b5e03c |
diff --git a/cmds-device.c b/cmds-device.c
|
|
Josef Bacik |
b5e03c |
index b24e2a3..75ee293 100644
|
|
Josef Bacik |
b5e03c |
--- a/cmds-device.c
|
|
Josef Bacik |
b5e03c |
+++ b/cmds-device.c
|
|
Josef Bacik |
b5e03c |
@@ -107,7 +107,8 @@ static int cmd_add_dev(int argc, char **argv)
|
|
Josef Bacik |
b5e03c |
continue;
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
- res = btrfs_prepare_device(devfd, argv[i], 1, &dev_block_count, &mixed);
|
|
Josef Bacik |
b5e03c |
+ res = btrfs_prepare_device(devfd, argv[i], 1, &dev_block_count,
|
|
Josef Bacik |
b5e03c |
+ 0, &mixed, 0);
|
|
Josef Bacik |
b5e03c |
if (res) {
|
|
Josef Bacik |
b5e03c |
fprintf(stderr, "ERROR: Unable to init '%s'\n", argv[i]);
|
|
Josef Bacik |
b5e03c |
close(devfd);
|
|
Josef Bacik |
b5e03c |
diff --git a/mkfs.c b/mkfs.c
|
|
Josef Bacik |
b5e03c |
index 8816db8..93cd83c 100644
|
|
Josef Bacik |
b5e03c |
--- a/mkfs.c
|
|
Josef Bacik |
b5e03c |
+++ b/mkfs.c
|
|
Josef Bacik |
b5e03c |
@@ -1373,11 +1373,9 @@ int main(int ac, char **av)
|
|
Josef Bacik |
b5e03c |
exit(1);
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
first_file = file;
|
|
Josef Bacik |
b5e03c |
- ret = __btrfs_prepare_device(fd, file, zero_end,
|
|
Josef Bacik |
b5e03c |
- &dev_block_count, &mixed, nodiscard);
|
|
Josef Bacik |
b5e03c |
- if (block_count == 0)
|
|
Josef Bacik |
b5e03c |
- block_count = dev_block_count;
|
|
Josef Bacik |
b5e03c |
- else if (block_count > dev_block_count) {
|
|
Josef Bacik |
b5e03c |
+ ret = btrfs_prepare_device(fd, file, zero_end, &dev_block_count,
|
|
Josef Bacik |
b5e03c |
+ block_count, &mixed, nodiscard);
|
|
Josef Bacik |
b5e03c |
+ if (block_count && block_count > dev_block_count) {
|
|
Josef Bacik |
b5e03c |
fprintf(stderr, "%s is smaller than requested size\n", file);
|
|
Josef Bacik |
b5e03c |
exit(1);
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
@@ -1418,7 +1416,7 @@ int main(int ac, char **av)
|
|
Josef Bacik |
b5e03c |
leafsize * i;
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
- ret = make_btrfs(fd, file, label, blocks, block_count,
|
|
Josef Bacik |
b5e03c |
+ ret = make_btrfs(fd, file, label, blocks, dev_block_count,
|
|
Josef Bacik |
b5e03c |
nodesize, leafsize,
|
|
Josef Bacik |
b5e03c |
sectorsize, stripesize);
|
|
Josef Bacik |
b5e03c |
if (ret) {
|
|
Josef Bacik |
b5e03c |
@@ -1474,9 +1472,8 @@ int main(int ac, char **av)
|
|
Josef Bacik |
b5e03c |
close(fd);
|
|
Josef Bacik |
b5e03c |
continue;
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
- dev_block_count = block_count;
|
|
Josef Bacik |
b5e03c |
- ret = __btrfs_prepare_device(fd, file, zero_end,
|
|
Josef Bacik |
b5e03c |
- &dev_block_count, &mixed, nodiscard);
|
|
Josef Bacik |
b5e03c |
+ ret = btrfs_prepare_device(fd, file, zero_end, &dev_block_count,
|
|
Josef Bacik |
b5e03c |
+ block_count, &mixed, nodiscard);
|
|
Josef Bacik |
b5e03c |
mixed = old_mixed;
|
|
Josef Bacik |
b5e03c |
BUG_ON(ret);
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
diff --git a/utils.c b/utils.c
|
|
Josef Bacik |
b5e03c |
index aade9e2..a5ffb62 100644
|
|
Josef Bacik |
b5e03c |
--- a/utils.c
|
|
Josef Bacik |
b5e03c |
+++ b/utils.c
|
|
Josef Bacik |
b5e03c |
@@ -537,13 +537,7 @@ int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
int btrfs_prepare_device(int fd, char *file, int zero_end, u64 *block_count_ret,
|
|
Josef Bacik |
b5e03c |
- int *mixed)
|
|
Josef Bacik |
b5e03c |
-{
|
|
Josef Bacik |
b5e03c |
- /* discard by default when called from 'device add' */
|
|
Josef Bacik |
b5e03c |
- return __btrfs_prepare_device(fd, file, zero_end, block_count_ret, mixed, 0);
|
|
Josef Bacik |
b5e03c |
-}
|
|
Josef Bacik |
b5e03c |
-int __btrfs_prepare_device(int fd, char *file, int zero_end, u64 *block_count_ret,
|
|
Josef Bacik |
b5e03c |
- int *mixed, int nodiscard)
|
|
Josef Bacik |
b5e03c |
+ u64 max_block_count, int *mixed, int nodiscard)
|
|
Josef Bacik |
b5e03c |
{
|
|
Josef Bacik |
b5e03c |
u64 block_count;
|
|
Josef Bacik |
b5e03c |
u64 bytenr;
|
|
Josef Bacik |
b5e03c |
@@ -561,8 +555,8 @@ int __btrfs_prepare_device(int fd, char *file, int zero_end, u64 *block_count_re
|
|
Josef Bacik |
b5e03c |
fprintf(stderr, "unable to find %s size\n", file);
|
|
Josef Bacik |
b5e03c |
exit(1);
|
|
Josef Bacik |
b5e03c |
}
|
|
Josef Bacik |
b5e03c |
- if (*block_count_ret)
|
|
Josef Bacik |
b5e03c |
- block_count = min(block_count, *block_count_ret);
|
|
Josef Bacik |
b5e03c |
+ if (max_block_count)
|
|
Josef Bacik |
b5e03c |
+ block_count = min(block_count, max_block_count);
|
|
Josef Bacik |
b5e03c |
zero_end = 1;
|
|
Josef Bacik |
b5e03c |
|
|
Josef Bacik |
b5e03c |
if (block_count < 1024 * 1024 * 1024 && !(*mixed)) {
|
|
Josef Bacik |
b5e03c |
diff --git a/utils.h b/utils.h
|
|
Josef Bacik |
b5e03c |
index c147c12..3a0368b 100644
|
|
Josef Bacik |
b5e03c |
--- a/utils.h
|
|
Josef Bacik |
b5e03c |
+++ b/utils.h
|
|
Josef Bacik |
b5e03c |
@@ -26,10 +26,8 @@ int make_btrfs(int fd, const char *device, const char *label,
|
|
Josef Bacik |
b5e03c |
u32 leafsize, u32 sectorsize, u32 stripesize);
|
|
Josef Bacik |
b5e03c |
int btrfs_make_root_dir(struct btrfs_trans_handle *trans,
|
|
Josef Bacik |
b5e03c |
struct btrfs_root *root, u64 objectid);
|
|
Josef Bacik |
b5e03c |
-int btrfs_prepare_device(int fd, char *file, int zero_end,
|
|
Josef Bacik |
b5e03c |
- u64 *block_count_ret, int *mixed);
|
|
Josef Bacik |
b5e03c |
-int __btrfs_prepare_device(int fd, char *file, int zero_end,
|
|
Josef Bacik |
b5e03c |
- u64 *block_count_ret, int *mixed, int nodiscard);
|
|
Josef Bacik |
b5e03c |
+int btrfs_prepare_device(int fd, char *file, int zero_end, u64 *block_count_ret,
|
|
Josef Bacik |
b5e03c |
+ u64 max_block_count, int *mixed, int nodiscard);
|
|
Josef Bacik |
b5e03c |
int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
|
|
Josef Bacik |
b5e03c |
struct btrfs_root *root, int fd, char *path,
|
|
Josef Bacik |
b5e03c |
u64 block_count, u32 io_width, u32 io_align,
|
|
Josef Bacik |
b5e03c |
--
|
|
Josef Bacik |
b5e03c |
1.7.7.6
|
|
Josef Bacik |
b5e03c |
|