]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/md/multipath.c
[PATCH] EDAC: atomic scrub operations
[linux-2.6-omap-h63xx.git] / drivers / md / multipath.c
index 145cdc5ad008090e67cabe449e10d8cac5395ff1..96f7af4ae400ad4eaa2dd7d47d9e1a1ce1ca3efa 100644 (file)
 #define        NR_RESERVED_BUFS        32
 
 
-static mdk_personality_t multipath_personality;
-
-
 static void *mp_pool_alloc(gfp_t gfp_flags, void *data)
 {
        struct multipath_bh *mpb;
-       mpb = kmalloc(sizeof(*mpb), gfp_flags);
-       if (mpb) 
-               memset(mpb, 0, sizeof(*mpb));
+       mpb = kzalloc(sizeof(*mpb), gfp_flags);
        return mpb;
 }
 
@@ -308,6 +303,7 @@ static void print_multipath_conf (multipath_conf_t *conf)
 static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
 {
        multipath_conf_t *conf = mddev->private;
+       struct request_queue *q;
        int found = 0;
        int path;
        struct multipath_info *p;
@@ -316,8 +312,8 @@ static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
 
        for (path=0; path<mddev->raid_disks; path++) 
                if ((p=conf->multipaths+path)->rdev == NULL) {
-                       blk_queue_stack_limits(mddev->queue,
-                                              rdev->bdev->bd_disk->queue);
+                       q = rdev->bdev->bd_disk->queue;
+                       blk_queue_stack_limits(mddev->queue, q);
 
                /* as we don't honour merge_bvec_fn, we must never risk
                 * violating it, so limit ->max_sector to one PAGE, as
@@ -325,7 +321,7 @@ static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
                 * (Note: it is very unlikely that a device with
                 * merge_bvec_fn will be involved in multipath.)
                 */
-                       if (rdev->bdev->bd_disk->queue->merge_bvec_fn &&
+                       if (q->merge_bvec_fn &&
                            mddev->queue->max_sectors > (PAGE_SIZE>>9))
                                blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
 
@@ -444,7 +440,7 @@ static int multipath_run (mddev_t *mddev)
         * should be freed in multipath_stop()]
         */
 
-       conf = kmalloc(sizeof(multipath_conf_t), GFP_KERNEL);
+       conf = kzalloc(sizeof(multipath_conf_t), GFP_KERNEL);
        mddev->private = conf;
        if (!conf) {
                printk(KERN_ERR 
@@ -452,9 +448,8 @@ static int multipath_run (mddev_t *mddev)
                        mdname(mddev));
                goto out;
        }
-       memset(conf, 0, sizeof(*conf));
 
-       conf->multipaths = kmalloc(sizeof(struct multipath_info)*mddev->raid_disks,
+       conf->multipaths = kzalloc(sizeof(struct multipath_info)*mddev->raid_disks,
                                   GFP_KERNEL);
        if (!conf->multipaths) {
                printk(KERN_ERR 
@@ -462,7 +457,6 @@ static int multipath_run (mddev_t *mddev)
                        mdname(mddev));
                goto out_free_conf;
        }
-       memset(conf->multipaths, 0, sizeof(struct multipath_info)*mddev->raid_disks);
 
        conf->working_disks = 0;
        ITERATE_RDEV(mddev,rdev,tmp) {
@@ -557,9 +551,10 @@ static int multipath_stop (mddev_t *mddev)
        return 0;
 }
 
-static mdk_personality_t multipath_personality=
+static struct mdk_personality multipath_personality =
 {
        .name           = "multipath",
+       .level          = LEVEL_MULTIPATH,
        .owner          = THIS_MODULE,
        .make_request   = multipath_make_request,
        .run            = multipath_run,
@@ -572,15 +567,17 @@ static mdk_personality_t multipath_personality=
 
 static int __init multipath_init (void)
 {
-       return register_md_personality (MULTIPATH, &multipath_personality);
+       return register_md_personality (&multipath_personality);
 }
 
 static void __exit multipath_exit (void)
 {
-       unregister_md_personality (MULTIPATH);
+       unregister_md_personality (&multipath_personality);
 }
 
 module_init(multipath_init);
 module_exit(multipath_exit);
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("md-personality-7"); /* MULTIPATH */
+MODULE_ALIAS("md-multipath");
+MODULE_ALIAS("md-level--4");