|
@@ -1477,11 +1477,24 @@ retry_write:
|
|
|
mbio->bi_bdev = (void*)rdev;
|
|
|
|
|
|
atomic_inc(&r10_bio->remaining);
|
|
|
+
|
|
|
+ cb = blk_check_plugged(raid10_unplug, mddev,
|
|
|
+ sizeof(*plug));
|
|
|
+ if (cb)
|
|
|
+ plug = container_of(cb, struct raid10_plug_cb,
|
|
|
+ cb);
|
|
|
+ else
|
|
|
+ plug = NULL;
|
|
|
spin_lock_irqsave(&conf->device_lock, flags);
|
|
|
- bio_list_add(&conf->pending_bio_list, mbio);
|
|
|
- conf->pending_count++;
|
|
|
+ if (plug) {
|
|
|
+ bio_list_add(&plug->pending, mbio);
|
|
|
+ plug->pending_cnt++;
|
|
|
+ } else {
|
|
|
+ bio_list_add(&conf->pending_bio_list, mbio);
|
|
|
+ conf->pending_count++;
|
|
|
+ }
|
|
|
spin_unlock_irqrestore(&conf->device_lock, flags);
|
|
|
- if (!mddev_check_plugged(mddev))
|
|
|
+ if (!plug)
|
|
|
md_wakeup_thread(mddev->thread);
|
|
|
}
|
|
|
}
|