Jameson Miller <jamill@xxxxxxxxxxxxx> writes: > +void mem_pool_combine(struct mem_pool *dst, struct mem_pool *src) > +{ > + struct mp_block *p; > + > + /* Append the blocks from src to dst */ > + if (dst->mp_block && src->mp_block) { > + /* > + * src and dst have blocks, append > + * blocks from src to dst. > + */ > + p = dst->mp_block; > + while (p->next_block) > + p = p->next_block; > + > + p->next_block = src->mp_block; Just being curious, but does this interact with the "we carve out only from the first block" done in step 4/8? The remaining unused space in the first block in the src pool would be wasted, which may not be such a big deal and may not even be worth comparing the available space in two blocks and picking a larger one. But we do want to decide _after_ thinking things through nevertheless.