diff options
author | phk <phk@FreeBSD.org> | 2002-04-22 06:53:20 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-04-22 06:53:20 +0000 |
commit | 68aee74f02a2096ba6c52e06d9d7da4f87ebeae5 (patch) | |
tree | d59411764ca8a1adbe2d8ed4697eb5b37cc2f8bd /sys/kern | |
parent | f094098e55e8c0555efc769184372be770b875ff (diff) | |
download | FreeBSD-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.c | 5 |
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); |