md/raid5: pass gfp_t arg to grow_one_stripe()
authorNeilBrown <neilb@suse.de>
Wed, 25 Feb 2015 01:02:51 +0000 (12:02 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 21 Apr 2015 22:00:42 +0000 (08:00 +1000)
This is needed for future improvement to stripe cache management.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid5.c

index f78b1964543b0d711cbb7464bea84d07535016f1..ed8e34153c3de54692e1940aee01501aef82e4df 100644 (file)
@@ -497,7 +497,7 @@ static void shrink_buffers(struct stripe_head *sh)
        }
 }
 
-static int grow_buffers(struct stripe_head *sh)
+static int grow_buffers(struct stripe_head *sh, gfp_t gfp)
 {
        int i;
        int num = sh->raid_conf->pool_size;
@@ -505,7 +505,7 @@ static int grow_buffers(struct stripe_head *sh)
        for (i = 0; i < num; i++) {
                struct page *page;
 
-               if (!(page = alloc_page(GFP_KERNEL))) {
+               if (!(page = alloc_page(gfp))) {
                        return 1;
                }
                sh->dev[i].page = page;
@@ -1963,10 +1963,10 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
        put_cpu();
 }
 
-static int grow_one_stripe(struct r5conf *conf, int hash)
+static int grow_one_stripe(struct r5conf *conf, int hash, gfp_t gfp)
 {
        struct stripe_head *sh;
-       sh = kmem_cache_zalloc(conf->slab_cache, GFP_KERNEL);
+       sh = kmem_cache_zalloc(conf->slab_cache, gfp);
        if (!sh)
                return 0;
 
@@ -1974,7 +1974,7 @@ static int grow_one_stripe(struct r5conf *conf, int hash)
 
        spin_lock_init(&sh->stripe_lock);
 
-       if (grow_buffers(sh)) {
+       if (grow_buffers(sh, gfp)) {
                shrink_buffers(sh);
                kmem_cache_free(conf->slab_cache, sh);
                return 0;
@@ -2016,7 +2016,7 @@ static int grow_stripes(struct r5conf *conf, int num)
        conf->pool_size = devs;
        hash = conf->max_nr_stripes % NR_STRIPE_HASH_LOCKS;
        while (num--) {
-               if (!grow_one_stripe(conf, hash))
+               if (!grow_one_stripe(conf, hash, GFP_KERNEL))
                        return 1;
                conf->max_nr_stripes++;
                hash = (hash + 1) % NR_STRIPE_HASH_LOCKS;
@@ -5841,7 +5841,7 @@ raid5_set_cache_size(struct mddev *mddev, int size)
                return err;
        hash = conf->max_nr_stripes % NR_STRIPE_HASH_LOCKS;
        while (size > conf->max_nr_stripes) {
-               if (grow_one_stripe(conf, hash))
+               if (grow_one_stripe(conf, hash, GFP_KERNEL))
                        conf->max_nr_stripes++;
                else break;
                hash = (hash + 1) % NR_STRIPE_HASH_LOCKS;