forked from Minki/linux
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:
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 *ret = kmem_cache_zalloc(bh_cachep,
|
||||
struct buffer_head *ret = kmem_cache_alloc(bh_cachep,
|
||||
set_migrateflags(gfp_flags, __GFP_RECLAIMABLE));
|
||||
if (ret) {
|
||||
INIT_LIST_HEAD(&ret->b_assoc_buffers);
|
||||
@ -3241,12 +3241,24 @@ int bh_submit_read(struct buffer_head *bh)
|
||||
}
|
||||
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)
|
||||
{
|
||||
int nrpages;
|
||||
|
||||
bh_cachep = KMEM_CACHE(buffer_head,
|
||||
SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD);
|
||||
bh_cachep = kmem_cache_create("buffer_head",
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user