Bump btrfs to lates commit with arm patch
Package-Manager: portage-2.2.0_alpha142 RepoMan-Options: --force
This commit is contained in:
@@ -1,7 +1,36 @@
|
||||
diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list.c
|
||||
--- btrfs-progs-0.20-rc1.orig/btrfs-list.c 2012-12-04 20:40:40.576142017 +0100
|
||||
+++ btrfs-progs-0.20-rc1/btrfs-list.c 2012-12-04 20:46:53.544650126 +0100
|
||||
@@ -324,7 +324,7 @@
|
||||
From patchwork Sun Oct 21 14:34:33 2012
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: [v2] Btrfs-progs: fix unaligned accesses
|
||||
Date: Sun, 21 Oct 2012 14:34:33 -0000
|
||||
From: Arne Jansen <sensille@gmx.net>
|
||||
X-Patchwork-Id: 1622631
|
||||
Message-Id: <1350830073-20944-1-git-send-email-sensille@gmx.net>
|
||||
To: linux-btrfs@vger.kernel.org
|
||||
|
||||
There are some unaligned accesses in progs that cause malfunction or
|
||||
crashes on ARM.
|
||||
This patch fixes the ones we stumbled upon.
|
||||
|
||||
Signed-off-by: Arne Jansen <sensille@gmx.net>
|
||||
tested-by: Andre Diekwisch <andred <at> mail.upb.de>
|
||||
|
||||
---
|
||||
Change v1->v2:
|
||||
Somehow sent the wrong patch without the patch to the setget functions.
|
||||
|
||||
---
|
||||
btrfs-list.c | 69 +++++++++++++++++++++++++++------------------------------
|
||||
ctree.h | 8 +++++-
|
||||
volumes.c | 8 ++++--
|
||||
3 files changed, 44 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/btrfs-list.c b/btrfs-list.c
|
||||
index e5f0f96..cb42fbc 100644
|
||||
--- a/btrfs-list.c
|
||||
+++ b/btrfs-list.c
|
||||
@@ -720,7 +720,7 @@ static u64 find_root_gen(int fd)
|
||||
int ret;
|
||||
struct btrfs_ioctl_search_args args;
|
||||
struct btrfs_ioctl_search_key *sk = &args.key;
|
||||
@@ -10,7 +39,7 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
unsigned long off = 0;
|
||||
u64 max_found = 0;
|
||||
int i;
|
||||
@@ -375,22 +375,21 @@
|
||||
@@ -771,22 +771,21 @@ static u64 find_root_gen(int fd)
|
||||
off = 0;
|
||||
for (i = 0; i < sk->nr_items; i++) {
|
||||
struct btrfs_root_item *item;
|
||||
@@ -42,37 +71,16 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
max_found = max(max_found,
|
||||
btrfs_root_generation(item));
|
||||
}
|
||||
@@ -519,9 +518,9 @@
|
||||
off = 0;
|
||||
sh = (struct btrfs_ioctl_search_header *)(args.buf + off);
|
||||
|
||||
- if (sh->type == BTRFS_INODE_REF_KEY) {
|
||||
+ if (sh.type == BTRFS_INODE_REF_KEY) {
|
||||
struct btrfs_inode_ref *ref;
|
||||
- dirid = sh->offset;
|
||||
+ dirid = sh.offset;
|
||||
|
||||
ref = (struct btrfs_inode_ref *)(sh + 1);
|
||||
namelen = btrfs_stack_inode_ref_name_len(ref);
|
||||
@@ -590,7 +589,7 @@
|
||||
|
||||
sh = (struct btrfs_ioctl_search_header *)args.buf;
|
||||
|
||||
- if (sh->type == BTRFS_DIR_ITEM_KEY) {
|
||||
+ if (sh.type == BTRFS_DIR_ITEM_KEY) {
|
||||
struct btrfs_dir_item *di;
|
||||
int name_len;
|
||||
char *name;
|
||||
@@ -613,7 +612,7 @@
|
||||
@@ -1009,7 +1008,7 @@ static int __list_subvol_search(int fd, struct root_lookup *root_lookup)
|
||||
int ret;
|
||||
struct btrfs_ioctl_search_args args;
|
||||
struct btrfs_ioctl_search_key *sk = &args.key;
|
||||
- struct btrfs_ioctl_search_header *sh;
|
||||
+ struct btrfs_ioctl_search_header sh;
|
||||
struct btrfs_root_ref *ref;
|
||||
struct btrfs_root_item *ri;
|
||||
unsigned long off = 0;
|
||||
int name_len;
|
||||
@@ -660,28 +659,27 @@
|
||||
@@ -1064,23 +1063,22 @@ static int __list_subvol_search(int fd, struct root_lookup *root_lookup)
|
||||
* read the root_ref item it contains
|
||||
*/
|
||||
for (i = 0; i < sk->nr_items; i++) {
|
||||
@@ -90,7 +98,27 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
|
||||
- add_root(root_lookup, sh->objectid, sh->offset,
|
||||
+ add_root(root_lookup, sh.objectid, sh.offset,
|
||||
dir_id, name, name_len);
|
||||
0, 0, dir_id, name, name_len, 0, 0, 0,
|
||||
NULL);
|
||||
- } else if (sh->type == BTRFS_ROOT_ITEM_KEY) {
|
||||
+ } else if (sh.type == BTRFS_ROOT_ITEM_KEY) {
|
||||
ri = (struct btrfs_root_item *)(args.buf + off);
|
||||
gen = btrfs_root_generation(ri);
|
||||
flags = btrfs_root_flags(ri);
|
||||
- if(sh->len >
|
||||
+ if(sh.len >
|
||||
sizeof(struct btrfs_root_item_v0)) {
|
||||
t = ri->otime.sec;
|
||||
ogen = btrfs_root_otransid(ri);
|
||||
@@ -1091,20 +1089,20 @@ static int __list_subvol_search(int fd, struct root_lookup *root_lookup)
|
||||
memset(uuid, 0, BTRFS_UUID_SIZE);
|
||||
}
|
||||
|
||||
- add_root(root_lookup, sh->objectid, 0,
|
||||
- sh->offset, flags, 0, NULL, 0, ogen,
|
||||
+ add_root(root_lookup, sh.objectid, 0,
|
||||
+ sh.offset, flags, 0, NULL, 0, ogen,
|
||||
gen, t, uuid);
|
||||
}
|
||||
|
||||
- off += sh->len;
|
||||
@@ -108,50 +136,8 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
+ sk->min_offset = sh.offset;
|
||||
}
|
||||
sk->nr_items = 4096;
|
||||
/* this iteration is done, step forward one root for the next
|
||||
@@ -810,17 +808,17 @@
|
||||
int flags = 0;
|
||||
char *name = NULL;
|
||||
|
||||
- if (sh->objectid == *cache_ino) {
|
||||
+ if (sh.objectid == *cache_ino) {
|
||||
name = *cache_full_name;
|
||||
} else if (*cache_full_name) {
|
||||
free(*cache_full_name);
|
||||
*cache_full_name = NULL;
|
||||
}
|
||||
if (!name) {
|
||||
- name = ino_resolve(fd, sh->objectid, cache_dirid,
|
||||
+ name = ino_resolve(fd, sh.objectid, cache_dirid,
|
||||
cache_dir_name);
|
||||
*cache_full_name = name;
|
||||
- *cache_ino = sh->objectid;
|
||||
+ *cache_ino = sh.objectid;
|
||||
}
|
||||
if (!name)
|
||||
return -EIO;
|
||||
@@ -841,16 +839,16 @@
|
||||
printf("unhandled extent type %d for inode %llu "
|
||||
"file offset %llu gen %llu\n",
|
||||
type,
|
||||
- (unsigned long long)sh->objectid,
|
||||
- (unsigned long long)sh->offset,
|
||||
+ (unsigned long long)sh.objectid,
|
||||
+ (unsigned long long)sh.offset,
|
||||
(unsigned long long)found_gen);
|
||||
|
||||
return -EIO;
|
||||
}
|
||||
printf("inode %llu file offset %llu len %llu disk start %llu "
|
||||
"offset %llu gen %llu flags ",
|
||||
- (unsigned long long)sh->objectid,
|
||||
- (unsigned long long)sh->offset,
|
||||
+ (unsigned long long)sh.objectid,
|
||||
+ (unsigned long long)sh.offset,
|
||||
(unsigned long long)len,
|
||||
(unsigned long long)disk_start,
|
||||
(unsigned long long)disk_offset,
|
||||
@@ -880,7 +878,7 @@
|
||||
sk->min_offset++;
|
||||
@@ -1556,7 +1554,7 @@ int btrfs_list_find_updated_files(int fd, u64 root_id, u64 oldest_gen)
|
||||
int ret;
|
||||
struct btrfs_ioctl_search_args args;
|
||||
struct btrfs_ioctl_search_key *sk = &args.key;
|
||||
@@ -160,7 +146,7 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
struct btrfs_file_extent_item *item;
|
||||
unsigned long off = 0;
|
||||
u64 found_gen;
|
||||
@@ -930,35 +928,34 @@
|
||||
@@ -1606,35 +1604,34 @@ int btrfs_list_find_updated_files(int fd, u64 root_id, u64 oldest_gen)
|
||||
* read the root_ref item it contains
|
||||
*/
|
||||
for (i = 0; i < sk->nr_items; i++) {
|
||||
@@ -205,10 +191,11 @@ diff -uNr btrfs-progs-0.20-rc1.orig/btrfs-list.c btrfs-progs-0.20-rc1/btrfs-list
|
||||
}
|
||||
sk->nr_items = 4096;
|
||||
if (sk->min_offset < (u64)-1)
|
||||
diff -uNr btrfs-progs-0.20-rc1.orig/ctree.h btrfs-progs-0.20-rc1/ctree.h
|
||||
--- btrfs-progs-0.20-rc1.orig/ctree.h 2012-12-04 20:40:40.579141982 +0100
|
||||
+++ btrfs-progs-0.20-rc1/ctree.h 2012-12-04 20:40:49.051039793 +0100
|
||||
@@ -1063,15 +1063,19 @@
|
||||
diff --git a/ctree.h b/ctree.h
|
||||
index 293b24f..0675989 100644
|
||||
--- a/ctree.h
|
||||
+++ b/ctree.h
|
||||
@@ -1086,15 +1086,19 @@ static inline u##bits btrfs_##name(struct extent_buffer *eb, \
|
||||
type *s) \
|
||||
{ \
|
||||
unsigned long offset = (unsigned long)s; \
|
||||
@@ -230,10 +217,11 @@ diff -uNr btrfs-progs-0.20-rc1.orig/ctree.h btrfs-progs-0.20-rc1/ctree.h
|
||||
}
|
||||
|
||||
#define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits) \
|
||||
diff -uNr btrfs-progs-0.20-rc1.orig/volumes.c btrfs-progs-0.20-rc1/volumes.c
|
||||
--- btrfs-progs-0.20-rc1.orig/volumes.c 2012-12-04 20:40:40.575142029 +0100
|
||||
+++ btrfs-progs-0.20-rc1/volumes.c 2012-12-04 20:40:49.052039781 +0100
|
||||
@@ -652,6 +652,7 @@
|
||||
diff --git a/volumes.c b/volumes.c
|
||||
index 8dca5e1..581c298 100644
|
||||
--- a/volumes.c
|
||||
+++ b/volumes.c
|
||||
@@ -652,6 +652,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
|
||||
int index;
|
||||
int stripe_len = 64 * 1024;
|
||||
struct btrfs_key key;
|
||||
@@ -241,7 +229,7 @@ diff -uNr btrfs-progs-0.20-rc1.orig/volumes.c btrfs-progs-0.20-rc1/volumes.c
|
||||
|
||||
if (list_empty(dev_list)) {
|
||||
return -ENOSPC;
|
||||
@@ -757,12 +758,13 @@
|
||||
@@ -757,12 +758,13 @@ again:
|
||||
}
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user