At the heart of the blist allocator is a union:
typedef struct blmeta { union { daddr_t bmu_avail; /* space available under us */ u_daddr_t bmu_bitmap; /* bitmap if we are a leaf */ } u; daddr_t bm_bighint; /* biggest contiguous block hint*/ } blmeta_t;
At some point in the distant past, daddr_t became a 64-bit integer, but u_daddr_t, which is defined locally by the blist allocator, was not extended from 32 to 64 bits. Consequently, the blist allocator started allocating twice as much memory to manage the same amount of swap space. This change updates the size of u_daddr_t to be 64 bits. This also requires a couple casts to be introduced where a 32-bit integer constant is being shifted to create a bit mask of type u_daddr_t.