|
@@ -5297,6 +5297,21 @@ int md_run(struct mddev *mddev)
|
|
|
return err;
|
|
|
}
|
|
|
if (mddev->queue) {
|
|
|
+ bool nonrot = true;
|
|
|
+
|
|
|
+ rdev_for_each(rdev, mddev) {
|
|
|
+ if (rdev->raid_disk >= 0 &&
|
|
|
+ !blk_queue_nonrot(bdev_get_queue(rdev->bdev))) {
|
|
|
+ nonrot = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (mddev->degraded)
|
|
|
+ nonrot = false;
|
|
|
+ if (nonrot)
|
|
|
+ queue_flag_set_unlocked(QUEUE_FLAG_NONROT, mddev->queue);
|
|
|
+ else
|
|
|
+ queue_flag_clear_unlocked(QUEUE_FLAG_NONROT, mddev->queue);
|
|
|
mddev->queue->backing_dev_info.congested_data = mddev;
|
|
|
mddev->queue->backing_dev_info.congested_fn = md_congested;
|
|
|
}
|