diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slob.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -394,6 +394,7 @@ static void slob_free(void *block, int size) | |||
394 | slob_t *prev, *next, *b = (slob_t *)block; | 394 | slob_t *prev, *next, *b = (slob_t *)block; |
395 | slobidx_t units; | 395 | slobidx_t units; |
396 | unsigned long flags; | 396 | unsigned long flags; |
397 | struct list_head *slob_list; | ||
397 | 398 | ||
398 | if (unlikely(ZERO_OR_NULL_PTR(block))) | 399 | if (unlikely(ZERO_OR_NULL_PTR(block))) |
399 | return; | 400 | return; |
@@ -422,7 +423,13 @@ static void slob_free(void *block, int size) | |||
422 | set_slob(b, units, | 423 | set_slob(b, units, |
423 | (void *)((unsigned long)(b + | 424 | (void *)((unsigned long)(b + |
424 | SLOB_UNITS(PAGE_SIZE)) & PAGE_MASK)); | 425 | SLOB_UNITS(PAGE_SIZE)) & PAGE_MASK)); |
425 | set_slob_page_free(sp, &free_slob_small); | 426 | if (size < SLOB_BREAK1) |
427 | slob_list = &free_slob_small; | ||
428 | else if (size < SLOB_BREAK2) | ||
429 | slob_list = &free_slob_medium; | ||
430 | else | ||
431 | slob_list = &free_slob_large; | ||
432 | set_slob_page_free(sp, slob_list); | ||
426 | goto out; | 433 | goto out; |
427 | } | 434 | } |
428 | 435 | ||