Messages in this thread Patch in this message | | | Date | Thu, 27 Jan 2000 02:18:05 +0200 (IST) | From | Gadi Oxman <> | Subject | Re: ide-scsi problems with multiple CD-Rs on same channel (2.2.14) |
| |
On Wed, 26 Jan 2000, Tkil wrote:
> >>>>> "Gadi" == Gadi Oxman <gadio@netvision.net.il> writes: > > Gadi> I'd recommend changing choose_drive() in drivers/block/ide.c > Gadi> as follows -- replacing the "drive = hwgroup->drive;" line with > Gadi> "drive = hwgroup->drive->next;" line, and commenting out the > Gadi> part later which tests the best->nice1 flag (the second part > Gadi> of the patch can alternatively be done by using "echo nice1:0 > > Gadi> /proc/ide/hdx/settings for each IDE drive). > > Gadi> This will select round-robin scheduling between the drives. This > Gadi> is usually not the best for throughput, but might be more > Gadi> appropriate when real-time constrains are involved. > > Well, a few issues: > > 1. Switching to hwgroup->drive->next causes serious problems at boot. > The four IDE devices are detected, but it stops at the "partition > check" for hda. > > So I reverted this portion of the patch. It might still be usable, > but I suspect that we would need to fix the termination condition > there too.
Sorry, my bad (the end of the while block also has to check for hwgroup->drive->next). Here is a corrected patch (against stock kernel).
Cheers,
Gadi
--- ide.c~ Wed Nov 17 08:15:22 1999 +++ ide.c Thu Jan 27 02:14:55 2000 @@ -1079,19 +1079,20 @@ repeat: best = NULL; - drive = hwgroup->drive; + drive = hwgroup->drive->next; do { if (drive->queue && (!drive->sleep || 0 <= (signed long)(jiffies - drive->sleep))) { if (!best || (drive->sleep && (!best->sleep || 0 < (signed long)(best->sleep - drive->sleep))) - || (!best->sleep && 0 < (signed long)(WAKEUP(best) - WAKEUP(drive)))) + || 0 /* (!best->sleep && 0 < (signed long)(WAKEUP(best) - WAKEUP(drive)))*/ ) { struct blk_dev_struct *bdev = &blk_dev[HWIF(drive)->major]; if (bdev->current_request != &bdev->plug) best = drive; } } - } while ((drive = drive->next) != hwgroup->drive); + } while ((drive = drive->next) != hwgroup->drive->next); +#if 0 if (best && best->nice1 && !best->sleep && best != hwgroup->drive && best->service_time > WAIT_MIN_SLEEP) { long t = (signed long)(WAKEUP(best) - jiffies); if (t >= WAIT_MIN_SLEEP) { @@ -1111,6 +1112,7 @@ } while ((drive = drive->next) != best); } } +#endif return best; }
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |