|
@@ -3159,7 +3159,8 @@ static void raid5_activate_delayed(raid5_conf_t *conf)
|
|
|
atomic_inc(&conf->preread_active_stripes);
|
|
|
list_add_tail(&sh->lru, &conf->handle_list);
|
|
|
}
|
|
|
- }
|
|
|
+ } else
|
|
|
+ blk_plug_device(conf->mddev->queue);
|
|
|
}
|
|
|
|
|
|
static void activate_bit_delay(raid5_conf_t *conf)
|
|
@@ -3549,7 +3550,8 @@ static int make_request(struct request_queue *q, struct bio * bi)
|
|
|
goto retry;
|
|
|
}
|
|
|
finish_wait(&conf->wait_for_overlap, &w);
|
|
|
- handle_stripe(sh, NULL);
|
|
|
+ set_bit(STRIPE_HANDLE, &sh->state);
|
|
|
+ clear_bit(STRIPE_DELAYED, &sh->state);
|
|
|
release_stripe(sh);
|
|
|
} else {
|
|
|
/* cannot get stripe for read-ahead, just give-up */
|
|
@@ -3892,7 +3894,7 @@ static int retry_aligned_read(raid5_conf_t *conf, struct bio *raid_bio)
|
|
|
* During the scan, completed stripes are saved for us by the interrupt
|
|
|
* handler, so that they will not have to wait for our next wakeup.
|
|
|
*/
|
|
|
-static void raid5d (mddev_t *mddev)
|
|
|
+static void raid5d(mddev_t *mddev)
|
|
|
{
|
|
|
struct stripe_head *sh;
|
|
|
raid5_conf_t *conf = mddev_to_conf(mddev);
|
|
@@ -3917,12 +3919,6 @@ static void raid5d (mddev_t *mddev)
|
|
|
activate_bit_delay(conf);
|
|
|
}
|
|
|
|
|
|
- if (list_empty(&conf->handle_list) &&
|
|
|
- atomic_read(&conf->preread_active_stripes) < IO_THRESHOLD &&
|
|
|
- !blk_queue_plugged(mddev->queue) &&
|
|
|
- !list_empty(&conf->delayed_list))
|
|
|
- raid5_activate_delayed(conf);
|
|
|
-
|
|
|
while ((bio = remove_bio_from_retry(conf))) {
|
|
|
int ok;
|
|
|
spin_unlock_irq(&conf->device_lock);
|