diff options
author | Christoph Lameter <clameter@sgi.com> | 2008-04-14 11:52:18 -0400 |
---|---|---|
committer | Pekka Enberg <penberg@cs.helsinki.fi> | 2008-04-14 11:52:18 -0400 |
commit | 49bd5221ce8fb55d12c04a3ffd375201c5bbfb7a (patch) | |
tree | 8569f6898326ae3ccbd24309dc0dd53707b11220 /mm/slub.c | |
parent | 50ef37b96c11e76625067ae413dc54585ea22585 (diff) |
slub: Move map/flag clearing to __free_slab
__free_slab does some diagnostics. The resetting of mapcount etc
in discard_slab() can interfere with debug processing. So move
the reset immediately before the page is freed.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -1125,6 +1125,8 @@ static void __free_slab(struct kmem_cache *s, struct page *page) | |||
1125 | NR_SLAB_RECLAIMABLE : NR_SLAB_UNRECLAIMABLE, | 1125 | NR_SLAB_RECLAIMABLE : NR_SLAB_UNRECLAIMABLE, |
1126 | -pages); | 1126 | -pages); |
1127 | 1127 | ||
1128 | __ClearPageSlab(page); | ||
1129 | reset_page_mapcount(page); | ||
1128 | __free_pages(page, s->order); | 1130 | __free_pages(page, s->order); |
1129 | } | 1131 | } |
1130 | 1132 | ||
@@ -1154,8 +1156,6 @@ static void discard_slab(struct kmem_cache *s, struct page *page) | |||
1154 | struct kmem_cache_node *n = get_node(s, page_to_nid(page)); | 1156 | struct kmem_cache_node *n = get_node(s, page_to_nid(page)); |
1155 | 1157 | ||
1156 | atomic_long_dec(&n->nr_slabs); | 1158 | atomic_long_dec(&n->nr_slabs); |
1157 | reset_page_mapcount(page); | ||
1158 | __ClearPageSlab(page); | ||
1159 | free_slab(s, page); | 1159 | free_slab(s, page); |
1160 | } | 1160 | } |
1161 | 1161 | ||