Exemplo n.º 1
0
size_t block_store_allocate(block_store_t *const bs) {
    if (bs && bs->fbm) {
        size_t free_block = bitmap_ffz(bs->fbm);
        if (free_block != SIZE_MAX) {
            bitmap_set(bs->fbm, free_block);
            // not going to mark dbm because there's no change (yet)
            return free_block;
        }
        block_store_errno = BS_FULL;
        return 0;
    }
    block_store_errno = BS_PARAM;
    return 0;
}
Exemplo n.º 2
0
/** Allocate a new ID.
 * @param alloc		Allocator to allocate from.
 * @return		New ID, or -1 if no IDs available. */
int32_t id_allocator_alloc(id_allocator_t *alloc) {
	int32_t id;

	mutex_lock(&alloc->lock);

	id = bitmap_ffz(alloc->bitmap, alloc->nbits);
	if(id < 0) {
		mutex_unlock(&alloc->lock);
		return -1;
	}

	bitmap_set(alloc->bitmap, id);

	mutex_unlock(&alloc->lock);
	return id;
}
Exemplo n.º 3
0
size_t block_store_allocate(block_store_t *const bs) {
    if (bs) {
        size_t free_block = bitmap_ffz(bs->fbm);
        if (free_block != SIZE_MAX) {
            bitmap_set(bs->fbm, free_block);
            bitmap_set(bs->dbm, FBM_BLOCK_CHANGE_LOCATION(free_block));
            // Set that FBM block as changed
            FLAG_SET(bs, DIRTY);
            bs_errno = BS_OK;
            return free_block;
        }
        bs_errno = BS_FULL;
        return 0;
    }
    bs_errno = BS_PARAM;
    return 0;
}