NeilBrown <neilb@xxxxxxxxxxxxxxx> wrote: > > + retry: > sh = get_active_stripe(conf, new_sector, pd_idx, (bi->bi_rw&RWA_MASK)); > if (sh) { > - > - while (!add_stripe_bio(sh, bi, dd_idx, (bi->bi_rw&RW_MASK))) { > - /* add failed due to overlap. Flush everything > + if (!add_stripe_bio(sh, bi, dd_idx, (bi->bi_rw&RW_MASK))) { > + /* Add failed due to overlap. Flush everything > * and wait a while > - * FIXME - overlapping requests should be handled better > */ > raid5_unplug_device(mddev->queue); > - set_current_state(TASK_UNINTERRUPTIBLE); > - schedule_timeout(1); > + release_stripe(sh); > + schedule(); > + goto retry; Worrisome. If the calling process has SCHED_RR or SCHED_FIFO policy, this could cause a lockup, perhaps. Some sort of real synchronisation scheme would be nicer. Or at the least, what was wrong with the schedule_timeout(1)? - To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html