OLD | NEW |
1 /* | 1 /* |
2 * linux/mm/slab.c | 2 * linux/mm/slab.c |
3 * Written by Mark Hemment, 1996/97. | 3 * Written by Mark Hemment, 1996/97. |
4 * (markhe@nextd.demon.co.uk) | 4 * (markhe@nextd.demon.co.uk) |
5 * | 5 * |
6 * kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli | 6 * kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli |
7 * | 7 * |
8 * Major cleanup, different bufctl logic, per-cpu arrays | 8 * Major cleanup, different bufctl logic, per-cpu arrays |
9 * (c) 2000 Manfred Spraul | 9 * (c) 2000 Manfred Spraul |
10 * | 10 * |
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1411 flags |= cachep->allocflags; | 1411 flags |= cachep->allocflags; |
1412 if (cachep->flags & SLAB_RECLAIM_ACCOUNT) | 1412 if (cachep->flags & SLAB_RECLAIM_ACCOUNT) |
1413 flags |= __GFP_RECLAIMABLE; | 1413 flags |= __GFP_RECLAIMABLE; |
1414 | 1414 |
1415 page = __alloc_pages_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporde
r); | 1415 page = __alloc_pages_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporde
r); |
1416 if (!page) { | 1416 if (!page) { |
1417 slab_out_of_memory(cachep, flags, nodeid); | 1417 slab_out_of_memory(cachep, flags, nodeid); |
1418 return NULL; | 1418 return NULL; |
1419 } | 1419 } |
1420 | 1420 |
| 1421 if (kasan_slab_page_alloc(page_address(page), |
| 1422 PAGE_SIZE << cachep->gfporder, flags)) { |
| 1423 __free_pages(page, cachep->gfporder); |
| 1424 return NULL; |
| 1425 } |
| 1426 |
1421 if (memcg_charge_slab(page, flags, cachep->gfporder, cachep)) { | 1427 if (memcg_charge_slab(page, flags, cachep->gfporder, cachep)) { |
| 1428 kasan_slab_page_free(page_address(page), |
| 1429 PAGE_SIZE << cachep->gfporder); |
1422 __free_pages(page, cachep->gfporder); | 1430 __free_pages(page, cachep->gfporder); |
1423 return NULL; | 1431 return NULL; |
1424 } | 1432 } |
1425 | 1433 |
1426 nr_pages = (1 << cachep->gfporder); | 1434 nr_pages = (1 << cachep->gfporder); |
1427 if (cachep->flags & SLAB_RECLAIM_ACCOUNT) | 1435 if (cachep->flags & SLAB_RECLAIM_ACCOUNT) |
1428 add_zone_page_state(page_zone(page), | 1436 add_zone_page_state(page_zone(page), |
1429 NR_SLAB_RECLAIMABLE, nr_pages); | 1437 NR_SLAB_RECLAIMABLE, nr_pages); |
1430 else | 1438 else |
1431 add_zone_page_state(page_zone(page), | 1439 add_zone_page_state(page_zone(page), |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 | 1475 |
1468 BUG_ON(!PageSlab(page)); | 1476 BUG_ON(!PageSlab(page)); |
1469 __ClearPageSlabPfmemalloc(page); | 1477 __ClearPageSlabPfmemalloc(page); |
1470 __ClearPageSlab(page); | 1478 __ClearPageSlab(page); |
1471 page_mapcount_reset(page); | 1479 page_mapcount_reset(page); |
1472 page->mapping = NULL; | 1480 page->mapping = NULL; |
1473 | 1481 |
1474 if (current->reclaim_state) | 1482 if (current->reclaim_state) |
1475 current->reclaim_state->reclaimed_slab += nr_freed; | 1483 current->reclaim_state->reclaimed_slab += nr_freed; |
1476 memcg_uncharge_slab(page, order, cachep); | 1484 memcg_uncharge_slab(page, order, cachep); |
| 1485 kasan_slab_page_free(page_address(page), PAGE_SIZE << order); |
1477 __free_pages(page, order); | 1486 __free_pages(page, order); |
1478 } | 1487 } |
1479 | 1488 |
1480 static void kmem_rcu_free(struct rcu_head *head) | 1489 static void kmem_rcu_free(struct rcu_head *head) |
1481 { | 1490 { |
1482 struct kmem_cache *cachep; | 1491 struct kmem_cache *cachep; |
1483 struct page *page; | 1492 struct page *page; |
1484 | 1493 |
1485 page = container_of(head, struct page, rcu_head); | 1494 page = container_of(head, struct page, rcu_head); |
1486 cachep = page->slab_cache; | 1495 cachep = page->slab_cache; |
(...skipping 2979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4466 | 4475 |
4467 size = virt_to_cache(objp)->object_size; | 4476 size = virt_to_cache(objp)->object_size; |
4468 /* We assume that ksize callers could use the whole allocated area, | 4477 /* We assume that ksize callers could use the whole allocated area, |
4469 * so we need to unpoison this area. | 4478 * so we need to unpoison this area. |
4470 */ | 4479 */ |
4471 kasan_unpoison_shadow(objp, size); | 4480 kasan_unpoison_shadow(objp, size); |
4472 | 4481 |
4473 return size; | 4482 return size; |
4474 } | 4483 } |
4475 EXPORT_SYMBOL(ksize); | 4484 EXPORT_SYMBOL(ksize); |
OLD | NEW |