diff options
author | Christoph Lameter <clameter@sgi.com> | 2006-06-30 04:55:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-30 14:25:35 -0400 |
commit | 9a865ffa34b6117a5e0b67640a084d8c2e198c93 (patch) | |
tree | c295d5a0831df81eeeded3834f32f513b9ae05c7 /mm/slab.c | |
parent | 34aa1330f9b3c5783d269851d467326525207422 (diff) |
[PATCH] zoned vm counters: conversion of nr_slab to per zone counter
- Allows reclaim to access counter without looping over processor counts.
- Allows accurate statistics on how many pages are used in a zone by
the slab. This may become useful to balance slab allocations over
various zones.
[akpm@osdl.org: bugfix]
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/slab.c')
-rw-r--r-- | mm/slab.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -1507,7 +1507,7 @@ static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid) | |||
1507 | nr_pages = (1 << cachep->gfporder); | 1507 | nr_pages = (1 << cachep->gfporder); |
1508 | if (cachep->flags & SLAB_RECLAIM_ACCOUNT) | 1508 | if (cachep->flags & SLAB_RECLAIM_ACCOUNT) |
1509 | atomic_add(nr_pages, &slab_reclaim_pages); | 1509 | atomic_add(nr_pages, &slab_reclaim_pages); |
1510 | add_page_state(nr_slab, nr_pages); | 1510 | add_zone_page_state(page_zone(page), NR_SLAB, nr_pages); |
1511 | for (i = 0; i < nr_pages; i++) | 1511 | for (i = 0; i < nr_pages; i++) |
1512 | __SetPageSlab(page + i); | 1512 | __SetPageSlab(page + i); |
1513 | return page_address(page); | 1513 | return page_address(page); |
@@ -1522,12 +1522,12 @@ static void kmem_freepages(struct kmem_cache *cachep, void *addr) | |||
1522 | struct page *page = virt_to_page(addr); | 1522 | struct page *page = virt_to_page(addr); |
1523 | const unsigned long nr_freed = i; | 1523 | const unsigned long nr_freed = i; |
1524 | 1524 | ||
1525 | sub_zone_page_state(page_zone(page), NR_SLAB, nr_freed); | ||
1525 | while (i--) { | 1526 | while (i--) { |
1526 | BUG_ON(!PageSlab(page)); | 1527 | BUG_ON(!PageSlab(page)); |
1527 | __ClearPageSlab(page); | 1528 | __ClearPageSlab(page); |
1528 | page++; | 1529 | page++; |
1529 | } | 1530 | } |
1530 | sub_page_state(nr_slab, nr_freed); | ||
1531 | if (current->reclaim_state) | 1531 | if (current->reclaim_state) |
1532 | current->reclaim_state->reclaimed_slab += nr_freed; | 1532 | current->reclaim_state->reclaimed_slab += nr_freed; |
1533 | free_pages((unsigned long)addr, cachep->gfporder); | 1533 | free_pages((unsigned long)addr, cachep->gfporder); |