aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch
diff options
context:
space:
mode:
authorNitin A Kamble <nitin.a.kamble@intel.com>2011-06-09 18:12:12 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-30 20:56:35 +0100
commit0c10be57b72901464d4bb9ea7b5383c42b08bcae (patch)
tree78e8746ac8215577208ce658bfb8001f43d9a6b9 /meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch
parent64497638e70c97f417c2bcdaf99ffcc843ad58ec (diff)
downloadopenembedded-core-contrib-0c10be57b72901464d4bb9ea7b5383c42b08bcae.tar.gz
btrfs-tools: new recipe for tools to operate on btrfs images
Added these patches to the recipe to get it to work as desired: Upstream patches from tmp & for-dragonn branches of repository http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs-unstable.git Also included the debian patches. Nitin's patch to make the makefile cross friendly And Xin Zhong's patch to improve mkfs.btrfs (From OE-Core rev: 57a2140dc9673c65fea088fbd024fbd002e6937b) Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch')
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch183
1 files changed, 183 insertions, 0 deletions
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch b/meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch
new file mode 100644
index 0000000000..47fc97725a
--- /dev/null
+++ b/meta/recipes-devtools/btrfs-tools/btrfs-tools/mkfs-xin-fixes.patch
@@ -0,0 +1,183 @@
+Upstream-Status: Pending
+
+This patch is made by xin.zhong@intel.com to implement these supported
+features in mkfs.btrfs:
+ * populate fs image from a directory while creating it
+ * reduce minimum size of the created image from 256MB to around 24MB
+ * while creating image use the specified device name rather than output.img
+
+Patch tested and incorporated in poky by:
+Nitin A Kamble <nitin.a.kamble@intel.com> 2011/06/20
+
+diff --git a/file-item.c b/file-item.c
+index 9732282..aed42c3 100644
+--- a/file-item.c
++++ b/file-item.c
+@@ -193,7 +193,7 @@ int btrfs_csum_file_block(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root, u64 alloc_end,
+ u64 bytenr, char *data, size_t len)
+ {
+- int ret;
++ int ret = 0;
+ struct btrfs_key file_key;
+ struct btrfs_key found_key;
+ u64 next_offset = (u64)-1;
+diff --git a/mkfs.c b/mkfs.c
+index 57c88f9..e953a33 100644
+--- a/mkfs.c
++++ b/mkfs.c
+@@ -36,7 +36,7 @@
+ #include <uuid/uuid.h>
+ #include <linux/fs.h>
+ #include <ctype.h>
+-#include <attr/xattr.h>
++#include <sys/xattr.h>
+ #include "kerncompat.h"
+ #include "ctree.h"
+ #include "disk-io.h"
+@@ -517,7 +517,6 @@ static int add_inode_items(struct btrfs_trans_handle *trans,
+ fail:
+ return ret;
+ }
+-
+ static int add_xattr_item(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root, u64 objectid,
+ const char *file_name)
+@@ -532,8 +531,10 @@ static int add_xattr_item(struct btrfs_trans_handle *trans,
+
+ ret = llistxattr(file_name, xattr_list, XATTR_LIST_MAX);
+ if (ret < 0) {
+- fprintf(stderr, "get a list of xattr failed for %s\n",
+- file_name);
++ if(errno == ENOTSUP)
++ return 0;
++ fprintf(stderr, "get a list of xattr failed for %s errno %d\n",
++ file_name, errno);
+ return ret;
+ }
+ if (ret == 0)
+@@ -546,8 +547,11 @@ static int add_xattr_item(struct btrfs_trans_handle *trans,
+
+ ret = getxattr(file_name, cur_name, cur_value, XATTR_SIZE_MAX);
+ if (ret < 0) {
+- fprintf(stderr, "get a xattr value failed for %s\n",
+- cur_name);
++ if(errno == ENOTSUP)
++ return 0;
++ fprintf(stderr, "get a xattr value failed for %s attr %s errno %d\n",
++ file_name, cur_name, errno);
++ return ret;
+ }
+
+ ret = btrfs_insert_xattr_item(trans, root, cur_name,
+@@ -563,7 +567,6 @@ static int add_xattr_item(struct btrfs_trans_handle *trans,
+
+ return ret;
+ }
+-
+ static int custom_alloc_extent(struct btrfs_root *root, u64 num_bytes,
+ u64 hint_byte, struct btrfs_key *ins)
+ {
+@@ -923,27 +926,27 @@ static int traverse_directory(struct btrfs_trans_handle *trans,
+ fprintf(stderr, "add_inode_items failed\n");
+ goto fail;
+ }
+-
+ ret = add_xattr_item(trans, root,
+ cur_inum, cur_file->d_name);
+ if (ret) {
+ fprintf(stderr, "add_xattr_item failed\n");
+- goto fail;
++ if(ret != -ENOTSUP)
++ goto fail;
+ }
+-
+ if (S_ISDIR(st.st_mode)) {
+ dir_entry = malloc(sizeof(struct directory_name_entry));
+ dir_entry->dir_name = cur_file->d_name;
+ dir_entry->path = make_path(parent_dir_entry->path,
+ cur_file->d_name);
+ dir_entry->inum = cur_inum;
+- list_add_tail(&dir_entry->list, &dir_head->list);
++ list_add_tail(&dir_entry->list, &dir_head->list);
+ } else if (S_ISREG(st.st_mode)) {
+ ret = add_file_items(trans, root, &cur_inode,
+ cur_inum, parent_inum, &st,
+ cur_file->d_name, out_fd);
+ if (ret) {
+- fprintf(stderr, "add_file_items failed\n");
++ fprintf(stderr, "add_file_items failed %s\n",
++ cur_file->d_name);
+ goto fail;
+ }
+ } else if (S_ISLNK(st.st_mode)) {
+@@ -987,7 +990,7 @@ static int create_chunks(struct btrfs_trans_handle *trans,
+ u64 chunk_size;
+ u64 meta_type = BTRFS_BLOCK_GROUP_METADATA;
+ u64 data_type = BTRFS_BLOCK_GROUP_DATA;
+- u64 minimum_data_chunk_size = 64 * 1024 * 1024;
++ u64 minimum_data_chunk_size = 8 * 1024 * 1024;
+ u64 i;
+ int ret;
+
+@@ -1062,7 +1065,6 @@ static u64 size_sourcedir(char *dir_name, u64 sectorsize,
+ char path[512];
+ char *file_name = "temp_file";
+ FILE *file;
+- u64 minimum_data_size = 256 * 1024 * 1024; /* 256MB */
+ u64 default_chunk_size = 8 * 1024 * 1024; /* 8MB */
+ u64 allocated_meta_size = 8 * 1024 * 1024; /* 8MB */
+ u64 allocated_total_size = 20 * 1024 * 1024; /* 20MB */
+@@ -1101,9 +1103,6 @@ static u64 size_sourcedir(char *dir_name, u64 sectorsize,
+
+ *num_of_meta_chunks_ret = num_of_meta_chunks;
+
+- if (total_size < minimum_data_size)
+- total_size = minimum_data_size;
+-
+ return total_size;
+ }
+
+@@ -1158,9 +1157,9 @@ int main(int ac, char **av)
+
+ char *source_dir = NULL;
+ int source_dir_set = 0;
+- char *output = "output.img";
+ u64 num_of_meta_chunks = 0;
+ u64 size_of_data = 0;
++ u64 source_dir_size = 0;
+
+ while(1) {
+ int c;
+@@ -1224,8 +1223,6 @@ int main(int ac, char **av)
+ fprintf(stderr, "Illegal nodesize %u\n", nodesize);
+ exit(1);
+ }
+- if (source_dir_set)
+- ac++;
+ ac = ac - optind;
+ if (ac == 0)
+ print_usage();
+@@ -1257,17 +1254,19 @@ int main(int ac, char **av)
+ block_count = dev_block_count;
+ } else {
+ ac = 0;
+- fd = open_target(output);
++ file = av[optind++];
++ fd = open_target(file);
+ if (fd < 0) {
+ fprintf(stderr, "unable to open the %s\n", file);
+ exit(1);
+ }
+
+- file = output;
+ first_fd = fd;
+ first_file = file;
+- block_count = size_sourcedir(source_dir, sectorsize,
++ source_dir_size = size_sourcedir(source_dir, sectorsize,
+ &num_of_meta_chunks, &size_of_data);
++ if(block_count < source_dir_size)
++ block_count = source_dir_size;
+ ret = zero_output_file(fd, block_count, sectorsize);
+ if (ret) {
+ fprintf(stderr, "unable to zero the output file\n");