- fix a bug when mkfs'ing a file (rhbz# 871778)

This commit is contained in:
Josef Bacik 2012-11-01 09:51:07 -04:00
parent 051fd1d0e7
commit 96158b59ff
2 changed files with 48 additions and 16 deletions

View File

@ -1,6 +1,25 @@
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile.patch4 btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile From fe4e9b20d9ffffbb6aade4083caa71d65f16230a Mon Sep 17 00:00:00 2001
--- btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile.patch4 2012-10-04 20:35:31.000000000 -0400 From: Josef Bacik <jbacik@fusionio.com>
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile 2012-10-17 13:48:02.331453645 -0400 Date: Fri, 20 Jul 2012 11:09:43 -0400
Subject: [PATCH] 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 | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 65 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 4894903..c7fd97d 100644
--- a/Makefile
+++ b/Makefile
@@ -67,7 +67,7 @@ btrfsck: $(objects) btrfsck.o @@ -67,7 +67,7 @@ btrfsck: $(objects) btrfsck.o
$(CC) $(CFLAGS) -o btrfsck btrfsck.o $(objects) $(LDFLAGS) $(LIBS) $(CC) $(CFLAGS) -o btrfsck btrfsck.o $(objects) $(LDFLAGS) $(LIBS)
@ -10,9 +29,10 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/Makefile.patch4 btrfs-progs-0.2
btrfs-debug-tree: $(objects) debug-tree.o btrfs-debug-tree: $(objects) debug-tree.o
$(CC) $(CFLAGS) -o btrfs-debug-tree $(objects) debug-tree.o $(LDFLAGS) $(LIBS) $(CC) $(CFLAGS) -o btrfs-debug-tree $(objects) debug-tree.o $(LDFLAGS) $(LIBS)
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 diff --git a/man/mkfs.btrfs.8.in b/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 index 72025ed..b7bcc1b 100644
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in 2012-10-17 13:48:02.331453645 -0400 --- a/man/mkfs.btrfs.8.in
+++ b/man/mkfs.btrfs.8.in
@@ -47,7 +47,10 @@ Specify a label for the filesystem. @@ -47,7 +47,10 @@ Specify a label for the filesystem.
.TP .TP
\fB\-m\fR, \fB\-\-metadata \fIprofile\fR \fB\-m\fR, \fB\-\-metadata \fIprofile\fR
@ -25,9 +45,10 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/man/mkfs.btrfs.8.in.patch4 btrf
.TP .TP
\fB\-M\fR, \fB\-\-mixed\fR \fB\-M\fR, \fB\-\-mixed\fR
Mix data and metadata chunks together for more efficient space Mix data and metadata chunks together for more efficient space
diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c diff --git a/mkfs.c b/mkfs.c
--- btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 2012-10-17 13:48:02.329453660 -0400 index 47f0c9c..72f10fa 100644
+++ btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c 2012-10-17 13:53:36.954806793 -0400 --- a/mkfs.c
+++ b/mkfs.c
@@ -37,6 +37,7 @@ @@ -37,6 +37,7 @@
#include <linux/fs.h> #include <linux/fs.h>
#include <ctype.h> #include <ctype.h>
@ -36,7 +57,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
#include "kerncompat.h" #include "kerncompat.h"
#include "ctree.h" #include "ctree.h"
#include "disk-io.h" #include "disk-io.h"
@@ -234,7 +235,7 @@ static int create_one_raid_group(struct @@ -234,7 +235,7 @@ static int create_one_raid_group(struct btrfs_trans_handle *trans,
static int create_raid_groups(struct btrfs_trans_handle *trans, static int create_raid_groups(struct btrfs_trans_handle *trans,
struct btrfs_root *root, u64 data_profile, struct btrfs_root *root, u64 data_profile,
int data_profile_opt, u64 metadata_profile, int data_profile_opt, u64 metadata_profile,
@ -45,7 +66,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
{ {
u64 num_devices = btrfs_super_num_devices(&root->fs_info->super_copy); u64 num_devices = btrfs_super_num_devices(&root->fs_info->super_copy);
u64 allowed; u64 allowed;
@@ -245,8 +246,12 @@ static int create_raid_groups(struct btr @@ -245,8 +246,12 @@ static int create_raid_groups(struct btrfs_trans_handle *trans,
* For mixed groups defaults are single/single. * For mixed groups defaults are single/single.
*/ */
if (!metadata_profile_opt && !mixed) { if (!metadata_profile_opt && !mixed) {
@ -59,7 +80,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
} }
if (!data_profile_opt && !mixed) { if (!data_profile_opt && !mixed) {
data_profile = (num_devices > 1) ? data_profile = (num_devices > 1) ?
@@ -1215,6 +1220,49 @@ static int check_leaf_or_node_size(u32 s @@ -1222,6 +1227,54 @@ static int check_leaf_or_node_size(u32 size, u32 sectorsize)
return 0; return 0;
} }
@ -82,7 +103,12 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
+ * reason on F17 at least so we'll do this trickery + * reason on F17 at least so we'll do this trickery
+ */ + */
+ disk = blkid_probe_get_wholedisk_devno(probe); + disk = blkid_probe_get_wholedisk_devno(probe);
+ if (!disk)
+ return 0;
+
+ devname = blkid_devno_to_devname(disk); + devname = blkid_devno_to_devname(disk);
+ if (!devname)
+ return 0;
+ +
+ dev = strrchr(devname, '/'); + dev = strrchr(devname, '/');
+ dev++; + dev++;
@ -109,7 +135,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
int main(int ac, char **av) int main(int ac, char **av)
{ {
char *file; char *file;
@@ -1241,6 +1289,7 @@ int main(int ac, char **av) @@ -1248,6 +1301,7 @@ int main(int ac, char **av)
int data_profile_opt = 0; int data_profile_opt = 0;
int metadata_profile_opt = 0; int metadata_profile_opt = 0;
int nodiscard = 0; int nodiscard = 0;
@ -117,7 +143,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
char *source_dir = NULL; char *source_dir = NULL;
int source_dir_set = 0; int source_dir_set = 0;
@@ -1360,6 +1409,9 @@ int main(int ac, char **av) @@ -1367,6 +1421,9 @@ int main(int ac, char **av)
exit(1); exit(1);
} }
} }
@ -127,7 +153,7 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
if (mixed) { if (mixed) {
if (metadata_profile != data_profile) { if (metadata_profile != data_profile) {
fprintf(stderr, "With mixed block groups data and metadata " fprintf(stderr, "With mixed block groups data and metadata "
@@ -1445,7 +1497,7 @@ raid_groups: @@ -1452,7 +1509,7 @@ raid_groups:
if (!source_dir_set) { if (!source_dir_set) {
ret = create_raid_groups(trans, root, data_profile, ret = create_raid_groups(trans, root, data_profile,
data_profile_opt, metadata_profile, data_profile_opt, metadata_profile,
@ -136,3 +162,6 @@ diff -up btrfs-progs-0.20.rc1.20121017git91d9eec/mkfs.c.patch4 btrfs-progs-0.20.
BUG_ON(ret); BUG_ON(ret);
} }
--
1.7.7.6

View File

@ -1,6 +1,6 @@
Name: btrfs-progs Name: btrfs-progs
Version: 0.20.rc1.20121017git91d9eec Version: 0.20.rc1.20121017git91d9eec
Release: 1%{?dist} Release: 2%{?dist}
Summary: Userspace programs for btrfs Summary: Userspace programs for btrfs
Group: System Environment/Base Group: System Environment/Base
@ -68,6 +68,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/btrfs.8.gz %{_mandir}/man8/btrfs.8.gz
%changelog %changelog
* Thu Nov 1 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-2
- fix a bug when mkfs'ing a file (rhbz# 871778)
* Wed Oct 17 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-1 * Wed Oct 17 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-1
- update to latest btrfs-progs - update to latest btrfs-progs