summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_disk.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-06-15 23:32:07 +0000
committerjeff <jeff@FreeBSD.org>2005-06-15 23:32:07 +0000
commitdec8b83b9d095bd94f7b4578a3a12220aff9a507 (patch)
treec06b7af852cf133d3bc1fac483dbe2329440f5df /sys/kern/subr_disk.c
parente1c499fa2ad11686d4107ff9d4e6f8caeea2ac86 (diff)
downloadFreeBSD-src-dec8b83b9d095bd94f7b4578a3a12220aff9a507.zip
FreeBSD-src-dec8b83b9d095bd94f7b4578a3a12220aff9a507.tar.gz
- Fix insertions of bios which represent data earlier than anything else
in the queue. The insertion sort assumed this had already been taken care of. Spotted by: Antoine Brodin Approved by: re (scottl)
Diffstat (limited to 'sys/kern/subr_disk.c')
-rw-r--r--sys/kern/subr_disk.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index c7b6b94..2248822 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -182,15 +182,12 @@ bioq_disksort(bioq, bp)
}
} else
bq = TAILQ_FIRST(&bioq->queue);
-
+ if (bp->bio_offset < bq->bio_offset) {
+ TAILQ_INSERT_BEFORE(bq, bp, bio_queue);
+ return;
+ }
/* Insertion sort */
while ((bn = TAILQ_NEXT(bq, bio_queue)) != NULL) {
-
- /*
- * We want to go after the current request if it is the end
- * of the first request list, or if the next request is a
- * larger cylinder than our request.
- */
if (bp->bio_offset < bn->bio_offset)
break;
bq = bn;
OpenPOWER on IntegriCloud