summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-04-22 06:53:20 +0000
committerphk <phk@FreeBSD.org>2002-04-22 06:53:20 +0000
commit68aee74f02a2096ba6c52e06d9d7da4f87ebeae5 (patch)
treed59411764ca8a1adbe2d8ed4697eb5b37cc2f8bd /sys/kern
parentf094098e55e8c0555efc769184372be770b875ff (diff)
downloadFreeBSD-src-68aee74f02a2096ba6c52e06d9d7da4f87ebeae5.zip
FreeBSD-src-68aee74f02a2096ba6c52e06d9d7da4f87ebeae5.tar.gz
Comment out Kirks io-request priority hack until we can do this in a
civilized way which doesn't cause grief. The problem is that it is not generally safe to cast a "struct bio *" to a "struct buf *". Things like ccd, vinum, ata-raid and GEOM constructs bio's which are not entrails of a struct buf. Also, curthread may or may not have anything to do with the I/O request at hand. The correct solution can either be to tag struct bio's with a priority derived from the requesting threads nice and have disksort act on this field, this wouldn't address the "silly-seek syndrome" where two equal processes bang the diskheads from one edge to the other of the disk repeatedly. Alternatively, and probably better: a sleep should be introduced either at the time the I/O is requested or at the time it is completed where we can be sure to sleep in the right thread. The sleep also needs to be in constant timeunits, 1/hz can be practicaly any sub-second size, at high HZ the current code practically doesn't do anything.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/subr_disklabel.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/kern/subr_disklabel.c b/sys/kern/subr_disklabel.c
index 8a7b70e..176dafe 100644
--- a/sys/kern/subr_disklabel.c
+++ b/sys/kern/subr_disklabel.c
@@ -50,6 +50,7 @@
#include <sys/syslog.h>
#include <machine/atomic.h>
+#ifdef notquite
/*
* Mutex to use when delaying niced I/O bound processes in bioqdisksort().
*/
@@ -61,6 +62,7 @@ dksort_init(void)
mtx_init(&dksort_mtx, "dksort", NULL, MTX_DEF);
}
SYSINIT(dksort, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, dksort_init, NULL)
+#endif
/*
* Seek sort for disks.
@@ -85,6 +87,8 @@ bioqdisksort(bioq, bp)
struct bio *bq;
struct bio *bn;
struct bio *be;
+
+#ifdef notquite
struct thread *td = curthread;
if (td && td->td_ksegrp->kg_nice > 0) {
@@ -98,6 +102,7 @@ bioqdisksort(bioq, bp)
td->td_ksegrp->kg_nice);
}
}
+#endif
if (!atomic_cmpset_int(&bioq->busy, 0, 1))
panic("Recursing in bioqdisksort()");
be = TAILQ_LAST(&bioq->queue, bio_queue);
OpenPOWER on IntegriCloud