X-Git-Url: http://git.onelab.eu/?p=linux-2.6.git;a=blobdiff_plain;f=drivers%2Fmd%2Fmultipath.c;fp=drivers%2Fmd%2Fmultipath.c;h=96f7af4ae400ad4eaa2dd7d47d9e1a1ce1ca3efa;hp=33f67caa91701424d6fab287a6a3cca6ad583e23;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 33f67caa9..96f7af4ae 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c @@ -35,6 +35,18 @@ #define NR_RESERVED_BUFS 32 +static void *mp_pool_alloc(gfp_t gfp_flags, void *data) +{ + struct multipath_bh *mpb; + mpb = kzalloc(sizeof(*mpb), gfp_flags); + return mpb; +} + +static void mp_pool_free(void *mpb, void *data) +{ + kfree(mpb); +} + static int multipath_map (multipath_conf_t *conf) { int i, disks = conf->raid_disks; @@ -480,10 +492,11 @@ static int multipath_run (mddev_t *mddev) mdname(mddev)); goto out_free_conf; } - mddev->degraded = conf->raid_disks - conf->working_disks; + mddev->degraded = conf->raid_disks = conf->working_disks; - conf->pool = mempool_create_kzalloc_pool(NR_RESERVED_BUFS, - sizeof(struct multipath_bh)); + conf->pool = mempool_create(NR_RESERVED_BUFS, + mp_pool_alloc, mp_pool_free, + NULL); if (conf->pool == NULL) { printk(KERN_ERR "multipath: couldn't allocate memory for %s\n",