- update to latest upstream btrfs-progs

This commit is contained in:
Josef Bacik 2012-10-17 14:09:50 -04:00
parent b5e03c726d
commit 0124baa368
4 changed files with 33 additions and 200 deletions

View File

@ -1,27 +1,7 @@
From f507119002c6bb972df09a47edfa8998c0fc8172 Mon Sep 17 00:00:00 2001
From: Josef Bacik <jbacik@fusionio.com>
Date: Fri, 20 Jul 2012 11:09:43 -0400
Subject: [PATCH 2/3] Btrfs-progs: detect if the disk we are formatting is a
ssd
SSD's do not gain anything by having metadata DUP turned on. The underlying
file system that is a part of all SSD's could easily map duplicate metadat
blocks into the same erase block which effectively eliminates the benefit of
duplicating the metadata on disk. So detect if we are formatting a single
SSD drive and if we are do not use DUP. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
---
Makefile | 2 +-
man/mkfs.btrfs.8.in | 5 +++-
mkfs.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 60 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index c0aaa3d..1afef49 100644
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,7 @@ btrfsck: $(objects) btrfsck.o
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile.patch4 btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile
--- btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile.patch4 2012-10-04 20:35:31.000000000 -0400
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile 2012-10-17 13:48:02.331453645 -0400
@@ -67,7 +67,7 @@ btrfsck: $(objects) btrfsck.o
$(CC) $(CFLAGS) -o btrfsck btrfsck.o $(objects) $(LDFLAGS) $(LIBS)
mkfs.btrfs: $(objects) mkfs.o
@ -30,11 +10,10 @@ index c0aaa3d..1afef49 100644
btrfs-debug-tree: $(objects) debug-tree.o
$(CC) $(CFLAGS) -o btrfs-debug-tree $(objects) debug-tree.o $(LDFLAGS) $(LIBS)
diff --git a/man/mkfs.btrfs.8.in b/man/mkfs.btrfs.8.in
index fc2e1d2..dfa7996 100644
--- a/man/mkfs.btrfs.8.in
+++ b/man/mkfs.btrfs.8.in
@@ -46,7 +46,10 @@ Specify a label for the filesystem.
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in.patch4 btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in
--- btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in.patch4 2012-10-04 20:35:31.000000000 -0400
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in 2012-10-17 13:48:02.331453645 -0400
@@ -47,7 +47,10 @@ Specify a label for the filesystem.
.TP
\fB\-m\fR, \fB\-\-metadata \fIprofile\fR
Specify how metadata must be spanned across the devices specified. Valid
@ -46,10 +25,9 @@ index fc2e1d2..dfa7996 100644
.TP
\fB\-M\fR, \fB\-\-mixed\fR
Mix data and metadata chunks together for more efficient space
diff --git a/mkfs.c b/mkfs.c
index dff5eb8..8816db8 100644
--- a/mkfs.c
+++ b/mkfs.c
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c
--- btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 2012-10-17 13:48:02.329453660 -0400
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c 2012-10-17 13:53:36.954806793 -0400
@@ -37,6 +37,7 @@
#include <linux/fs.h>
#include <ctype.h>
@ -58,7 +36,7 @@ index dff5eb8..8816db8 100644
#include "kerncompat.h"
#include "ctree.h"
#include "disk-io.h"
@@ -234,7 +235,7 @@ static int create_one_raid_group(struct btrfs_trans_handle *trans,
@@ -234,7 +235,7 @@ static int create_one_raid_group(struct
static int create_raid_groups(struct btrfs_trans_handle *trans,
struct btrfs_root *root, u64 data_profile,
int data_profile_opt, u64 metadata_profile,
@ -67,7 +45,7 @@ index dff5eb8..8816db8 100644
{
u64 num_devices = btrfs_super_num_devices(&root->fs_info->super_copy);
u64 allowed;
@@ -245,8 +246,12 @@ static int create_raid_groups(struct btrfs_trans_handle *trans,
@@ -245,8 +246,12 @@ static int create_raid_groups(struct btr
* For mixed groups defaults are single/single.
*/
if (!metadata_profile_opt && !mixed) {
@ -81,8 +59,8 @@ index dff5eb8..8816db8 100644
}
if (!data_profile_opt && !mixed) {
data_profile = (num_devices > 1) ?
@@ -1201,6 +1206,49 @@ static int zero_output_file(int out_fd, u64 size, u32 sectorsize)
return ret;
@@ -1215,6 +1220,49 @@ static int check_leaf_or_node_size(u32 s
return 0;
}
+static int is_ssd(const char *file)
@ -131,7 +109,7 @@ index dff5eb8..8816db8 100644
int main(int ac, char **av)
{
char *file;
@@ -1227,6 +1275,7 @@ int main(int ac, char **av)
@@ -1241,6 +1289,7 @@ int main(int ac, char **av)
int data_profile_opt = 0;
int metadata_profile_opt = 0;
int nodiscard = 0;
@ -139,7 +117,7 @@ index dff5eb8..8816db8 100644
char *source_dir = NULL;
int source_dir_set = 0;
@@ -1352,6 +1401,9 @@ int main(int ac, char **av)
@@ -1360,6 +1409,9 @@ int main(int ac, char **av)
exit(1);
}
}
@ -149,7 +127,7 @@ index dff5eb8..8816db8 100644
if (mixed) {
if (metadata_profile != data_profile) {
fprintf(stderr, "With mixed block groups data and metadata "
@@ -1438,7 +1490,7 @@ raid_groups:
@@ -1445,7 +1497,7 @@ raid_groups:
if (!source_dir_set) {
ret = create_raid_groups(trans, root, data_profile,
data_profile_opt, metadata_profile,
@ -158,6 +136,3 @@ index dff5eb8..8816db8 100644
BUG_ON(ret);
}
--
1.7.7.6

View File

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

View File

@ -1,6 +1,6 @@
diff -up btrfs-progs-0.19/btrfsck.c.orig btrfs-progs-0.19/btrfsck.c
--- btrfs-progs-0.19/btrfsck.c.orig 2012-04-11 10:44:44.000000000 -0400
+++ btrfs-progs-0.19/btrfsck.c 2012-04-11 10:45:35.769767880 -0400
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/btrfsck.c.patch2 btrfs-progs-0.20.rc1.20121017git91d9eec/btrfsck.c
--- btrfs-progs-0.20.rc1.20121017git91d9eec/btrfsck.c.patch2 2012-10-04 20:35:31.000000000 -0400
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/btrfsck.c 2012-10-17 13:45:30.172638798 -0400
@@ -22,7 +22,9 @@
#include <stdlib.h>
#include <unistd.h>
@ -11,10 +11,10 @@ diff -up btrfs-progs-0.19/btrfsck.c.orig btrfs-progs-0.19/btrfsck.c
#include <getopt.h>
#include "kerncompat.h"
#include "ctree.h"
diff -up btrfs-progs-0.19/mkfs.c.orig btrfs-progs-0.19/mkfs.c
--- btrfs-progs-0.19/mkfs.c.orig 2012-04-11 10:44:44.652047854 -0400
+++ btrfs-progs-0.19/mkfs.c 2012-04-11 10:46:03.727553072 -0400
@@ -1198,7 +1198,7 @@ int main(int ac, char **av)
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch2 btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c
--- btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch2 2012-10-17 13:45:30.167638835 -0400
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c 2012-10-17 13:46:41.444084426 -0400
@@ -1228,7 +1228,7 @@ int main(int ac, char **av)
u64 alloc_start = 0;
u64 metadata_profile = 0;
u64 data_profile = 0;
@ -23,12 +23,12 @@ diff -up btrfs-progs-0.19/mkfs.c.orig btrfs-progs-0.19/mkfs.c
u32 sectorsize = 4096;
u32 nodesize = leafsize;
u32 stripesize = 4096;
@@ -1270,7 +1270,7 @@ int main(int ac, char **av)
@@ -1304,7 +1304,7 @@ int main(int ac, char **av)
print_usage();
}
}
- sectorsize = max(sectorsize, (u32)getpagesize());
+ sectorsize = max(sectorsize, (u32)sysconf(_SC_PAGESIZE));
if (leafsize < sectorsize || (leafsize & (sectorsize - 1))) {
fprintf(stderr, "Illegal leafsize %u\n", leafsize);
if (check_leaf_or_node_size(leafsize, sectorsize))
exit(1);
if (check_leaf_or_node_size(nodesize, sectorsize))

View File

@ -1,5 +1,5 @@
Name: btrfs-progs
Version: 0.19.20120817git043a639
Version: 0.20.rc1.20121017git91d9eec
Release: 1%{?dist}
Summary: Userspace programs for btrfs
@ -12,8 +12,7 @@ Patch1: btrfs-progs-valgrind.patch
Patch2: btrfs-progs-build-fixes.patch
Patch3: Btrfs-progs-add-btrfs-device-ready-command.patch
Patch4: Btrfs-progs-detect-if-the-disk-we-are-formatting-is-.patch
Patch5: Btrfs-progs-only-enforce-a-maximum-size-if-we-specif.patch
Patch6: btrfs-init-dev-list.patch
Patch5: btrfs-init-dev-list.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -33,7 +32,6 @@ check, modify and correct any inconsistencies in the btrfs filesystem.
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%build
make CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}
@ -70,6 +68,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/btrfs.8.gz
%changelog
* Wed Oct 17 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-1
- update to latest btrfs-progs
* Fri Aug 17 2012 Josef Bacik <josef@toxicpanda.com> 0.19.20120817git043a639-1
- update to latest btrfs-progs