aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slob.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slob.c')
-rw-r--r--mm/slob.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/slob.c b/mm/slob.c
index 23631e2bb57a..6a208f81888a 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -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