static void io_ctl_set_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
 {
-       __le64 *val;
-
        io_ctl_map_page(io_ctl, 1);
 
        /*
                io_ctl->size -= sizeof(u64) * 2;
        }
 
-       val = io_ctl->cur;
-       *val = cpu_to_le64(generation);
+       put_unaligned_le64(generation, io_ctl->cur);
        io_ctl->cur += sizeof(u64);
 }
 
 static int io_ctl_check_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
 {
-       __le64 *gen;
+       u64 cache_gen;
 
        /*
         * Skip the crc area.  If we don't check crcs then we just have a 64bit
                io_ctl->size -= sizeof(u64) * 2;
        }
 
-       gen = io_ctl->cur;
-       if (le64_to_cpu(*gen) != generation) {
+       cache_gen = get_unaligned_le64(io_ctl->cur);
+       if (cache_gen != generation) {
                btrfs_err_rl(io_ctl->fs_info,
                        "space cache generation (%llu) does not match inode (%llu)",
-                               *gen, generation);
+                               cache_gen, generation);
                io_ctl_unmap_page(io_ctl);
                return -EIO;
        }
                return -ENOSPC;
 
        entry = io_ctl->cur;
-       entry->offset = cpu_to_le64(offset);
-       entry->bytes = cpu_to_le64(bytes);
+       put_unaligned_le64(offset, &entry->offset);
+       put_unaligned_le64(bytes, &entry->bytes);
        entry->type = (bitmap) ? BTRFS_FREE_SPACE_BITMAP :
                BTRFS_FREE_SPACE_EXTENT;
        io_ctl->cur += sizeof(struct btrfs_free_space_entry);
        }
 
        e = io_ctl->cur;
-       entry->offset = le64_to_cpu(e->offset);
-       entry->bytes = le64_to_cpu(e->bytes);
+       entry->offset = get_unaligned_le64(&e->offset);
+       entry->bytes = get_unaligned_le64(&e->bytes);
        *type = e->type;
        io_ctl->cur += sizeof(struct btrfs_free_space_entry);
        io_ctl->size -= sizeof(struct btrfs_free_space_entry);