summaryrefslogtreecommitdiff
path: root/ctree.h
diff options
context:
space:
mode:
authorArne Jansen <sensille@gmx.net>2012-10-21 16:34:33 +0200
committerDavid Sterba <dsterba@suse.cz>2013-01-17 18:27:53 +0100
commit0b0a954e4383d2074c499523e2aa89527e5ac053 (patch)
treefdf81a3192e0fdfb6e444130f1f3edcf243345b8 /ctree.h
parentbb2cfccf81691af1db5519cb1f4eb4abfbafbf9f (diff)
Btrfs-progs: fix unaligned accesses
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>
Diffstat (limited to 'ctree.h')
-rw-r--r--ctree.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/ctree.h b/ctree.h
index 293b24fe..06759896 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; \
+ u##bits m; \
type *p = (type *) (eb->data + offset); \
- return le##bits##_to_cpu(p->member); \
+ memcpy(&m, &p->member, sizeof(m)); \
+ return le##bits##_to_cpu(m); \
} \
static inline void btrfs_set_##name(struct extent_buffer *eb, \
type *s, u##bits val) \
{ \
unsigned long offset = (unsigned long)s; \
+ u##bits m; \
type *p = (type *) (eb->data + offset); \
- p->member = cpu_to_le##bits(val); \
+ m = cpu_to_le##bits(val); \
+ memcpy(&p->member, &m, sizeof(m)); \
}
#define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits) \