|
@@ -394,6 +394,7 @@ static void slob_free(void *block, int size)
|
|
|
slob_t *prev, *next, *b = (slob_t *)block;
|
|
|
slobidx_t units;
|
|
|
unsigned long flags;
|
|
|
+ struct list_head *slob_list;
|
|
|
|
|
|
if (unlikely(ZERO_OR_NULL_PTR(block)))
|
|
|
return;
|
|
@@ -422,7 +423,13 @@ static void slob_free(void *block, int size)
|
|
|
set_slob(b, units,
|
|
|
(void *)((unsigned long)(b +
|
|
|
SLOB_UNITS(PAGE_SIZE)) & PAGE_MASK));
|
|
|
- set_slob_page_free(sp, &free_slob_small);
|
|
|
+ if (size < SLOB_BREAK1)
|
|
|
+ slob_list = &free_slob_small;
|
|
|
+ else if (size < SLOB_BREAK2)
|
|
|
+ slob_list = &free_slob_medium;
|
|
|
+ else
|
|
|
+ slob_list = &free_slob_large;
|
|
|
+ set_slob_page_free(sp, slob_list);
|
|
|
goto out;
|
|
|
}
|
|
|
|