diff options
Diffstat (limited to 'drivers/md/raid10.c')
| -rw-r--r-- | drivers/md/raid10.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 6b86a0032cf8..797ed60abd5e 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1282,17 +1282,16 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,  		plug = container_of(cb, struct raid10_plug_cb, cb);  	else  		plug = NULL; -	spin_lock_irqsave(&conf->device_lock, flags);  	if (plug) {  		bio_list_add(&plug->pending, mbio);  		plug->pending_cnt++;  	} else { +		spin_lock_irqsave(&conf->device_lock, flags);  		bio_list_add(&conf->pending_bio_list, mbio);  		conf->pending_count++; -	} -	spin_unlock_irqrestore(&conf->device_lock, flags); -	if (!plug) +		spin_unlock_irqrestore(&conf->device_lock, flags);  		md_wakeup_thread(mddev->thread); +	}  }  static void raid10_write_request(struct mddev *mddev, struct bio *bio, @@ -3612,6 +3611,9 @@ static int raid10_run(struct mddev *mddev)  	int first = 1;  	bool discard_supported = false; +	if (mddev_init_writes_pending(mddev) < 0) +		return -ENOMEM; +  	if (mddev->private == NULL) {  		conf = setup_conf(mddev);  		if (IS_ERR(conf)) | 
