|
@@ -64,7 +64,7 @@ static void * r1bio_pool_alloc(gfp_t gfp_flags, void *data)
|
|
|
|
|
|
/* allocate a r1bio with room for raid_disks entries in the bios array */
|
|
/* allocate a r1bio with room for raid_disks entries in the bios array */
|
|
r1_bio = kzalloc(size, gfp_flags);
|
|
r1_bio = kzalloc(size, gfp_flags);
|
|
- if (!r1_bio)
|
|
|
|
|
|
+ if (!r1_bio && pi->mddev)
|
|
unplug_slaves(pi->mddev);
|
|
unplug_slaves(pi->mddev);
|
|
|
|
|
|
return r1_bio;
|
|
return r1_bio;
|
|
@@ -1979,13 +1979,14 @@ static int run(mddev_t *mddev)
|
|
conf->poolinfo = kmalloc(sizeof(*conf->poolinfo), GFP_KERNEL);
|
|
conf->poolinfo = kmalloc(sizeof(*conf->poolinfo), GFP_KERNEL);
|
|
if (!conf->poolinfo)
|
|
if (!conf->poolinfo)
|
|
goto out_no_mem;
|
|
goto out_no_mem;
|
|
- conf->poolinfo->mddev = mddev;
|
|
|
|
|
|
+ conf->poolinfo->mddev = NULL;
|
|
conf->poolinfo->raid_disks = mddev->raid_disks;
|
|
conf->poolinfo->raid_disks = mddev->raid_disks;
|
|
conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc,
|
|
conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc,
|
|
r1bio_pool_free,
|
|
r1bio_pool_free,
|
|
conf->poolinfo);
|
|
conf->poolinfo);
|
|
if (!conf->r1bio_pool)
|
|
if (!conf->r1bio_pool)
|
|
goto out_no_mem;
|
|
goto out_no_mem;
|
|
|
|
+ conf->poolinfo->mddev = mddev;
|
|
|
|
|
|
spin_lock_init(&conf->device_lock);
|
|
spin_lock_init(&conf->device_lock);
|
|
mddev->queue->queue_lock = &conf->device_lock;
|
|
mddev->queue->queue_lock = &conf->device_lock;
|