From 73043664dc8a48d329881632d33dd9eae6bd060a Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 14 Aug 2013 16:16:39 -0700 Subject: [PATCH] btrfs-progs: fix in-place byte swapping Storing fixed-endian values in native cpu types defeats the purpose of using sparse endian types to find endian conversion bugs. Signed-off-by: Zach Brown Signed-off-by: David Sterba Signed-off-by: Chris Mason --- print-tree.c | 6 +++--- uuid-tree.c | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/print-tree.c b/print-tree.c index 761448d1..913b1bb3 100644 --- a/print-tree.c +++ b/print-tree.c @@ -688,11 +688,11 @@ static void print_uuid_item(struct extent_buffer *l, unsigned long offset, return; } while (item_size) { - u64 subvol_id; + __le64 subvol_id; read_extent_buffer(l, &subvol_id, offset, sizeof(u64)); - subvol_id = le64_to_cpu(subvol_id); - printf("\t\tsubvol_id %llu\n", (unsigned long long)subvol_id); + printf("\t\tsubvol_id %llu\n", + (unsigned long long)le64_to_cpu(subvol_id)); item_size -= sizeof(u64); offset += sizeof(u64); } diff --git a/uuid-tree.c b/uuid-tree.c index 3a4c48e4..39c3f3fd 100644 --- a/uuid-tree.c +++ b/uuid-tree.c @@ -43,6 +43,7 @@ static int btrfs_uuid_tree_lookup_any(int fd, const u8 *uuid, u8 type, struct btrfs_ioctl_search_args search_arg; struct btrfs_ioctl_search_header *search_header; u32 item_size; + __le64 lesubid; btrfs_uuid_to_key(uuid, &key_objectid, &key_offset); @@ -82,8 +83,8 @@ static int btrfs_uuid_tree_lookup_any(int fd, const u8 *uuid, u8 type, } /* return first stored id */ - memcpy(subid, search_header + 1, sizeof(*subid)); - *subid = le64_to_cpu(*subid); + memcpy(&lesubid, search_header + 1, sizeof(lesubid)); + *subid = le64_to_cpu(lesubid); out: return ret;