diff options
author | Arne Jansen <sensille@gmx.net> | 2012-10-21 16:34:33 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-01-17 18:27:53 +0100 |
commit | 0b0a954e4383d2074c499523e2aa89527e5ac053 (patch) | |
tree | fdf81a3192e0fdfb6e444130f1f3edcf243345b8 /ctree.h | |
parent | bb2cfccf81691af1db5519cb1f4eb4abfbafbf9f (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.h | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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) \ |