int bitmap_block_alloc(size_t * start, size_t len, bitmap_t * bitmap, size_t size) { int retval; retval = bitmap_block_search(start, len, bitmap, size); if (retval == 0) { bitmap_block_update(bitmap, 1, *start, len); } return retval; }
static int get_iblocks(size_t * iblock, size_t pcount, struct vregion ** vreg_ret) { struct vregion * vreg = last_vreg; retry_vra: do { if (bitmap_block_search(iblock, pcount, vreg->map, vreg->size) == 0) break; /* Found block */ } while ((vreg = vreg->node.next)); if (!vreg) { /* Not found */ vreg = vreg_alloc_node(pcount); if (!vreg) return -ENOMEM; goto retry_vra; } bitmap_block_update(vreg->map, 1, *iblock, pcount); *vreg_ret = vreg; return 0; }