234,6 → 234,7 |
slab = obj2slab(obj); |
|
ASSERT(slab->cache == cache); |
ASSERT(slab->available < cache->objects); |
|
spinlock_lock(&cache->slablock); |
|
242,11 → 243,6 |
slab->available++; |
|
/* Move it to correct list */ |
if (slab->available == 1) { |
/* It was in full, move to partial */ |
list_remove(&slab->link); |
list_prepend(&slab->link, &cache->partial_slabs); |
} |
if (slab->available == cache->objects) { |
/* Free associated memory */ |
list_remove(&slab->link); |
254,6 → 250,10 |
* magazine is always allocated with NO reclaim, |
* keep all locks */ |
frames = slab_space_free(cache, slab); |
} else if (slab->available == 1) { |
/* It was in full, move to partial */ |
list_remove(&slab->link); |
list_prepend(&slab->link, &cache->partial_slabs); |
} |
|
spinlock_unlock(&cache->slablock); |
282,9 → 282,9 |
*/ |
spinlock_unlock(&cache->slablock); |
slab = slab_space_alloc(cache, flags); |
if (!slab) |
return NULL; |
spinlock_lock(&cache->slablock); |
if (!slab) |
goto err; |
} else { |
slab = list_get_instance(cache->partial_slabs.next, |
slab_t, |
301,9 → 301,6 |
|
spinlock_unlock(&cache->slablock); |
return obj; |
err: |
spinlock_unlock(&cache->slablock); |
return NULL; |
} |
|
/**************************************/ |