From de1c997a363067b1f9c6ea99947bc4f8ba532c30 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 16 Jun 2010 16:45:16 +1000 Subject: [PATCH] --- yaml --- r: 200571 b: refs/heads/master c: e4e11e385d1e5516ac76c956d6c25e6c2fa1b8d0 h: refs/heads/master i: 200569: 1d88c0927c3b67c2a30bb41b56a3343b55703245 200567: 8674761f70a0a2c83c569464ac305fe9dd6ae124 v: v3 --- [refs] | 2 +- trunk/drivers/md/raid5.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index a75e2642f8c6..b73607020860 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 049d6c1ef983c9ac43aa423dfd752071a5b0002d +refs/heads/master: e4e11e385d1e5516ac76c956d6c25e6c2fa1b8d0 diff --git a/trunk/drivers/md/raid5.c b/trunk/drivers/md/raid5.c index d2c0f94fa37d..2c055dec8c68 100644 --- a/trunk/drivers/md/raid5.c +++ b/trunk/drivers/md/raid5.c @@ -277,12 +277,13 @@ static struct stripe_head *get_free_stripe(raid5_conf_t *conf) return sh; } -static void shrink_buffers(struct stripe_head *sh, int num) +static void shrink_buffers(struct stripe_head *sh) { struct page *p; int i; + int num = sh->raid_conf->pool_size; - for (i=0; idev[i].page; if (!p) continue; @@ -291,11 +292,12 @@ static void shrink_buffers(struct stripe_head *sh, int num) } } -static int grow_buffers(struct stripe_head *sh, int num) +static int grow_buffers(struct stripe_head *sh) { int i; + int num = sh->raid_conf->pool_size; - for (i=0; iraid_disks, conf->previous_raid_disks); sh = kmem_cache_alloc(conf->slab_cache, GFP_KERNEL); if (!sh) return 0; - memset(sh, 0, sizeof(*sh) + (disks-1)*sizeof(struct r5dev)); + memset(sh, 0, sizeof(*sh) + (conf->pool_size-1)*sizeof(struct r5dev)); sh->raid_conf = conf; spin_lock_init(&sh->lock); #ifdef CONFIG_MULTICORE_RAID456 init_waitqueue_head(&sh->ops.wait_for_ops); #endif - if (grow_buffers(sh, disks)) { - shrink_buffers(sh, disks); + if (grow_buffers(sh)) { + shrink_buffers(sh); kmem_cache_free(conf->slab_cache, sh); return 0; } @@ -1468,7 +1469,7 @@ static int drop_one_stripe(raid5_conf_t *conf) if (!sh) return 0; BUG_ON(atomic_read(&sh->count)); - shrink_buffers(sh, conf->pool_size); + shrink_buffers(sh); kmem_cache_free(conf->slab_cache, sh); atomic_dec(&conf->active_stripes); return 1;