BCH_COMPRESSION_NR              = 5,
 };
 
+#define BCH_EXTENT_ENTRY_TYPES()               \
+       x(ptr,                  0)              \
+       x(crc32,                1)              \
+       x(crc64,                2)              \
+       x(crc128,               3)
+#define BCH_EXTENT_ENTRY_MAX   4
+
 enum bch_extent_entry_type {
-       BCH_EXTENT_ENTRY_ptr            = 0,
-       BCH_EXTENT_ENTRY_crc32          = 1,
-       BCH_EXTENT_ENTRY_crc64          = 2,
-       BCH_EXTENT_ENTRY_crc128         = 3,
+#define x(f, n) BCH_EXTENT_ENTRY_##f = n,
+       BCH_EXTENT_ENTRY_TYPES()
+#undef x
 };
 
-#define BCH_EXTENT_ENTRY_MAX           4
-
 /* Compressed/uncompressed size are stored biased by 1: */
 struct bch_extent_crc32 {
 #if defined(__LITTLE_ENDIAN_BITFIELD)
 #else
 #error edit for your odd byteorder.
 #endif
-       struct bch_extent_crc32         crc32;
-       struct bch_extent_crc64         crc64;
-       struct bch_extent_crc128        crc128;
-       struct bch_extent_ptr           ptr;
+
+#define x(f, n) struct bch_extent_##f  f;
+       BCH_EXTENT_ENTRY_TYPES()
+#undef x
 };
 
 enum {
 
 static inline size_t extent_entry_bytes(const union bch_extent_entry *entry)
 {
        switch (extent_entry_type(entry)) {
-       case BCH_EXTENT_ENTRY_crc32:
-               return sizeof(struct bch_extent_crc32);
-       case BCH_EXTENT_ENTRY_crc64:
-               return sizeof(struct bch_extent_crc64);
-       case BCH_EXTENT_ENTRY_crc128:
-               return sizeof(struct bch_extent_crc128);
-       case BCH_EXTENT_ENTRY_ptr:
-               return sizeof(struct bch_extent_ptr);
+#define x(f, n)                                                \
+       case BCH_EXTENT_ENTRY_##f:                      \
+               return sizeof(struct bch_extent_##f);
+       BCH_EXTENT_ENTRY_TYPES()
+#undef x
        default:
                BUG();
        }