|
@@ -73,7 +73,7 @@ static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size)
|
|
|
{
|
|
|
unsigned int sz = sizeof(struct bio) + extra_size;
|
|
|
struct kmem_cache *slab = NULL;
|
|
|
- struct bio_slab *bslab;
|
|
|
+ struct bio_slab *bslab, *new_bio_slabs;
|
|
|
unsigned int i, entry = -1;
|
|
|
|
|
|
mutex_lock(&bio_slab_lock);
|
|
@@ -97,11 +97,12 @@ static struct kmem_cache *bio_find_or_create_slab(unsigned int extra_size)
|
|
|
|
|
|
if (bio_slab_nr == bio_slab_max && entry == -1) {
|
|
|
bio_slab_max <<= 1;
|
|
|
- bio_slabs = krealloc(bio_slabs,
|
|
|
- bio_slab_max * sizeof(struct bio_slab),
|
|
|
- GFP_KERNEL);
|
|
|
- if (!bio_slabs)
|
|
|
+ new_bio_slabs = krealloc(bio_slabs,
|
|
|
+ bio_slab_max * sizeof(struct bio_slab),
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!new_bio_slabs)
|
|
|
goto out_unlock;
|
|
|
+ bio_slabs = new_bio_slabs;
|
|
|
}
|
|
|
if (entry == -1)
|
|
|
entry = bio_slab_nr++;
|