raid5: fix to detect failure of register_shrinker
authorChao Yu <yuchao0@huawei.com>
Tue, 20 Sep 2016 02:33:57 +0000 (10:33 +0800)
committerShaohua Li <shli@fb.com>
Wed, 21 Sep 2016 16:09:44 +0000 (09:09 -0700)
register_shrinker can fail after commit 1d3d4437eae1 ("vmscan: per-node
deferred work"), we should detect the failure of it, otherwise we may
fail to register shrinker after raid5 configuration was setup successfully.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Shaohua Li <shli@fb.com>
drivers/md/raid5.c

index 5883ef0..08274b4 100644 (file)
@@ -6670,7 +6670,12 @@ static struct r5conf *setup_conf(struct mddev *mddev)
        conf->shrinker.count_objects = raid5_cache_count;
        conf->shrinker.batch = 128;
        conf->shrinker.flags = 0;
-       register_shrinker(&conf->shrinker);
+       if (register_shrinker(&conf->shrinker)) {
+               printk(KERN_ERR
+                      "md/raid:%s: couldn't register shrinker.\n",
+                      mdname(mddev));
+               goto abort;
+       }
 
        sprintf(pers_name, "raid%d", mddev->new_level);
        conf->thread = md_register_thread(raid5d, mddev, pers_name);