bufferhead: revert constructor removal
The constructor for buffer_head slabs was removed recently. We need the constructor back in slab defrag in order to insure that slab objects always have a definite state even before we allocated them. I think we mistakenly merged the removal of the constuctor into a cleanup patch. You (ie: akpm) had a test that showed that the removal of the constructor led to a small regression. The prior state makes things easier for slab defrag. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
aec2c3ed01
commit
b98938c373
18
fs/buffer.c
18
fs/buffer.c
@@ -3153,7 +3153,7 @@ static void recalc_bh_state(void)
|
|||||||
|
|
||||||
struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)
|
struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)
|
||||||
{
|
{
|
||||||
struct buffer_head *ret = kmem_cache_zalloc(bh_cachep,
|
struct buffer_head *ret = kmem_cache_alloc(bh_cachep,
|
||||||
set_migrateflags(gfp_flags, __GFP_RECLAIMABLE));
|
set_migrateflags(gfp_flags, __GFP_RECLAIMABLE));
|
||||||
if (ret) {
|
if (ret) {
|
||||||
INIT_LIST_HEAD(&ret->b_assoc_buffers);
|
INIT_LIST_HEAD(&ret->b_assoc_buffers);
|
||||||
@@ -3241,12 +3241,24 @@ int bh_submit_read(struct buffer_head *bh)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bh_submit_read);
|
EXPORT_SYMBOL(bh_submit_read);
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_buffer_head(struct kmem_cache *cachep, void *data)
|
||||||
|
{
|
||||||
|
struct buffer_head *bh = data;
|
||||||
|
|
||||||
|
memset(bh, 0, sizeof(*bh));
|
||||||
|
INIT_LIST_HEAD(&bh->b_assoc_buffers);
|
||||||
|
}
|
||||||
|
|
||||||
void __init buffer_init(void)
|
void __init buffer_init(void)
|
||||||
{
|
{
|
||||||
int nrpages;
|
int nrpages;
|
||||||
|
|
||||||
bh_cachep = KMEM_CACHE(buffer_head,
|
bh_cachep = kmem_cache_create("buffer_head",
|
||||||
SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD);
|
sizeof(struct buffer_head), 0,
|
||||||
|
(SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
|
||||||
|
SLAB_MEM_SPREAD),
|
||||||
|
init_buffer_head);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Limit the bh occupancy to 10% of ZONE_NORMAL
|
* Limit the bh occupancy to 10% of ZONE_NORMAL
|
||||||
|
Reference in New Issue
Block a user