Não tenho certeza se entendi a pergunta, mas talvez isso seja pelo menos um indicativo para a direção certa. Quanto à API, não acho que há muito a ser feito sobre isso, mas para ler a fonte.
Isso não será mais do que uma versão em prosa do que a fonte diz. A versão que eu consultei era 3.11.7.
De embaralhar rapidamente os bits relevantes se mm/memblock.c
parece que 1) memblock_reserve () chama memblock_add_region () que sob certas condições chama memblock_double_array () que pode então chamar, novamente sob certas condições, memblock_free (). Isto acontece quando o kernel encontrou espaço livre e tem que mover a matriz apontando para regiões de memória reais como a matriz antiga, caso a matriz já esteja cheia (veja as linhas 267-278 de mm/memblock.c
).
Então, para resumir: não é necessário uma condição de erro se você ver memblock_free () e memblock_remove () sendo chamados imediatamente após memblock_reserve (), eu acho.