diff options
Diffstat (limited to 'libbcachefs/bkey.h')
-rw-r--r-- | libbcachefs/bkey.h | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libbcachefs/bkey.h b/libbcachefs/bkey.h index f665e2e1..2d6c8a23 100644 --- a/libbcachefs/bkey.h +++ b/libbcachefs/bkey.h @@ -13,8 +13,6 @@ void bch2_to_binary(char *, const u64 *, unsigned); -#define BKEY_PADDED(key) __BKEY_PADDED(key, BKEY_EXTENT_VAL_U64s_MAX) - /* bkey with split value, const */ struct bkey_s_c { const struct bkey *k; @@ -590,25 +588,31 @@ BKEY_VAL_ACCESSORS(quota, BCH_QUOTA); /* byte order helpers */ -#if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN) -#error edit for your odd byteorder. -#endif +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#ifdef __LITTLE_ENDIAN +static inline unsigned high_word_offset(const struct bkey_format *f) +{ + return f->key_u64s - 1; +} #define high_bit_offset 0 -#define __high_word(u64s, k) ((k)->_data + (u64s) - 1) #define nth_word(p, n) ((p) - (n)) -#else +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + +static inline unsigned high_word_offset(const struct bkey_format *f) +{ + return 0; +} #define high_bit_offset KEY_PACKED_BITS_START -#define __high_word(u64s, k) ((k)->_data) #define nth_word(p, n) ((p) + (n)) +#else +#error edit for your odd byteorder. #endif -#define high_word(format, k) __high_word((format)->key_u64s, k) +#define high_word(f, k) ((k)->_data + high_word_offset(f)) #define next_word(p) nth_word(p, 1) #define prev_word(p) nth_word(p, -1) |