mav
b5e1bf6b39
Call wakeup() only for the first request on the queue.
2009-12-30 17:23:27 +00:00
mav
9980b82769
MFp4:
...
Remove msleep() timeout from g_io_schedule_up/down(). It works fine
without it, saving few percents of CPU on high request rates without
need to rearm callout twice per request.
2009-09-06 19:33:13 +00:00
trasz
669f7d9712
Make gjournal work with kernel compiled with "options DIAGNOSTIC".
...
Previously, it would panic immediately.
Reviewed by: pjd
Approved by: re (kib)
2009-06-30 14:34:06 +00:00
luigi
39676e4ab4
As discussed in the devsummit, introduce two fields in the
...
struct bio to store classification information, and a hook
for classifier functions that can be called by g_io_request().
This code is from Fabio Checconi as part of his GSOC work.
2009-06-11 09:55:26 +00:00
sbruno
19f6a53c5d
Just a fixup for a KTRACE message I stumbled upon many moons ago.
...
Reviewed by: Scott Long
MFC after: 2 days
2008-09-18 15:02:19 +00:00
phk
e8d782d36d
Don't limit BIO_DELETE requests to MAXPHYS, they perform no data
...
transfers, so they are not subject to the VM system limitation.
2007-12-16 18:03:31 +00:00
pjd
4f3fb64c4b
Save stack only when KTR_GEOM is both compiled into the kernel and enabled
...
in debug.ktr.mask. Because saving stack is very expensive, it's better only
to do it when one really wants to.
Reported by: Dan Nelson
2007-10-26 06:55:00 +00:00
pjd
835266e088
Implement g_delete_data() similar to g_read_data() and g_write_data().
...
OK'ed by: phk
2007-05-05 16:35:22 +00:00
jhb
9081d44243
Use pause() rather than tsleep() on stack variables and function pointers.
2007-02-27 17:23:29 +00:00
jhb
61da08318e
Use tsleep() rather than msleep() with a NULL mtx parameter.
2007-02-23 23:06:10 +00:00
pjd
cb51d8d011
We expect 'bio_data != NULL' for BIO_{READ,WRITE,GETATTR}, but for
...
BIO_{DELETE,FLUSH} we expect 'bio_data == NULL'.
Reviewed by: phk
2007-01-28 23:36:07 +00:00
pjd
d5cc909451
Add a new I/O request - BIO_FLUSH, which basically tells providers below to
...
flush their caches. For now will mostly be used by disks to flush their
write cache.
Sponsored by: home.pl
2006-10-31 21:11:21 +00:00
pjd
280370a7da
Add g_duplicate_bio() function which does the same thing what g_clone_bio()
...
is doing, but g_duplicate_bio() allocates new bio with M_WAITOK flag.
2006-06-05 21:13:22 +00:00
ru
740bc18a1b
Fix a typo.
2006-03-13 14:59:57 +00:00
pjd
b4b6876e6e
Assert proper use of bio_caller1, bio_caller2, bio_cflags, bio_driver1,
...
bio_driver2 and bio_pflags fields.
Reviewed by: phk
2006-03-01 19:01:58 +00:00
jhb
e535e11c9f
- Add a new simple facility for marking the current thread as being in a
...
state where sleeping on a sleep queue is not allowed. The facility
doesn't support recursion but uses a simple private per-thread flag
(TDP_NOSLEEPING). The sleepq_add() function will panic if the flag is
set and INVARIANTS is enabled.
- Use this new facility to replace the g_xup and g_xdown mutexes that were
(ab)used to achieve similar behavior.
- Disallow sleeping in interrupt threads when invoking interrupt handlers.
MFC after: 1 week
Reviewed by: phk
2005-09-15 19:05:37 +00:00
pjd
aa258f8f85
Use KTR to log allocations and destructions of bios.
...
This should hopefully allow to track down "duplicate free of g_bio" panics.
2005-08-29 11:39:24 +00:00
phk
388b4d6c8d
By design I left a tiny race in updating the I/O statistics based on
...
the assumption that performance was more important that beancounter
quality statistics.
As it transpires the microoptimization is not measurable in the
real world and the inconsistent statistics confuse users, so revert
the decision.
MT6 candidate: possibly
MT5 candidate: possibly
2005-07-25 21:12:54 +00:00
rwatson
6a5cd72bf3
Add KTR_GEOM, which allows tracing of basic GEOM I/O events occuring
...
in the g_up and g_down threads. Each time a bio is propelled up and
down the stack, an event is generating showing the provider, offset,
and length, as well as thread wakeup and work status information.
2004-10-21 18:35:24 +00:00
ups
9d97668203
Trace information about a buffer while we still control it.
...
Reviewed by: phk
Approved by: sam (mentor)
2004-10-11 21:22:59 +00:00
phk
c6a0a9edbf
Don't set the BIO_ONQUEUE debugging flag until we actually put the bio
...
onto a queue. This made the ENOMEM handling an instant panic.
2004-10-06 20:59:59 +00:00
phk
dd7446483c
Protect the start/end counts on consumers and providers with the up/down
...
mutexes.
Make it possible to also protect the disk statistics (at a minor cost in
performance) by setting bit 2 of kern.geom.collectstats.
2004-09-28 11:56:37 +00:00
pjd
5b9c332a3c
- Set maximum request size to MAXPHYS (128kB), instead of DFLPHYS (64kB).
...
- Set minimum request size to sectorsize, instead of 512 bytes.
Approved by: phk (some time ago)
2004-09-28 08:34:27 +00:00
phk
02b88adf06
Add more KASSERTS and checks.
2004-08-30 09:33:06 +00:00
phk
4759b478a2
Introduce g_alloc_bio() as a waiting variant of g_new_bio().
...
Use in places where we can sleep and where we previously failed to check
for a NULL pointer.
MT5 candidate.
2004-08-27 14:43:11 +00:00
pjd
8623e8af4d
When sending request once again because of ENOMEM, reset bio_children
...
and bio_inbed fields to 0. Without this change we can end up with
I/O leakage in some rare situations.
I tested this change by putting failure probability mechanism simlar
to this used in NOP class into g_clone_bio(9) function, so it was
able to return NULL with the given probability.
Discussed with: phk
2004-08-11 12:04:35 +00:00
rwatson
ddb1bad6a3
The g_up and g_down threads use a local 'mymutex' mutex to allow WITNESS
...
to warn about attempts to sleep in the I/O path. This change pushes the
definition and use of 'mymutex' behind #ifdef WITNESS to avoid the cost
in non-debugging cases. This results in a clear .22% performance win for
512 byte and 1k I/O tests on my SMP test box. Not much, but every bit
counts.
2004-06-26 23:27:42 +00:00
phk
e6a8fb50df
Make the sysctl kern.geom.collectstats more granular.
...
Bit 0 controls statistics collection on GEOM providers.
Bit 1 controls statistics collection on GEOM consumers.
Default value is 1.
Prodded by: scottl
2004-06-09 19:44:44 +00:00
pjd
37382454e0
Calculate bio_completed properly or die!
...
Approved by: phk
2004-04-04 20:37:28 +00:00
pjd
c681583fbc
Added g_print_bio() function to print informations about given bio.
...
Approved by: phk, scottl (mentor)
2004-02-11 18:21:32 +00:00
phk
d82e43eede
Bring back the geom_bioqueues, they _are_ a good idea.
...
ATA will uses these RSN.
2004-01-28 08:39:18 +00:00
truckman
87a37b565f
Correct usage of mtx_init() API. This is not a functional change since
...
the code happened to work because MTX_DEF and NULL are both defined as 0.
Reviewed by: phk
2003-12-07 23:20:53 +00:00
phk
5a35d3b764
Forgotten commit: If a provider has zero sectorsize, it is an
...
indication of lack of media.
Tripped up: peter
2003-10-22 06:32:20 +00:00
phk
b7c9250fa7
Remove KASSERT check for negative bio_offsets, add "normal" EIO
...
error return for same.
2003-10-19 19:06:54 +00:00
phk
c7d1762ad7
Allow our bio tools to be used for local bio-chopping by not mandating
...
a bio_from value. bio_to is still mandated (mostly for debuggign) and
shall be copied from the parent bio.
2003-10-06 09:07:35 +00:00
phk
4b80280a92
Add more KASSERTS().
2003-09-26 20:52:46 +00:00
phk
99d28702f5
Reorder a couple of KASSERTS to give more sensible messages.
...
Found by: GEOM 101 class of '03
2003-09-11 00:49:02 +00:00
phk
b35539c7d2
In case we encounter a zero sectorsize provider in g_io_check(), fail
...
the request with a printf rather than a divide by zero error.
2003-08-13 06:42:56 +00:00
phk
57f7d6f488
Sleep on "-" in our normal state to simplify debugging.
2003-06-18 10:33:09 +00:00
obrien
40ee2bd5c8
Use __FBSDID().
...
Approved by: phk
2003-06-11 06:49:16 +00:00
phk
4e002d7a93
Hide the "ENOMEM" notice messages behind bootverbose. They are still
...
a valuable debugging tool for certain kinds of problems.
Approved by: re/scottl
2003-05-07 05:37:31 +00:00
phk
26f669a3c9
Use an uma-zone for allocation bio requests.
2003-05-02 12:36:12 +00:00
phk
055cf65eb1
Back out all the stuff that didn't belong in the last commit.
2003-05-02 06:42:59 +00:00
phk
4c52a206d2
Use g_slice_spoiled() rather than g_std_spoiled().
...
Remember to free the buffer we got from g_read_data().
2003-05-02 06:36:14 +00:00
phk
03b1ca36ba
Time has run from the "run GEOM in userland" harness, and the new regression
...
test is built to test GEOM as running in the kernel.
This commit is basically "unifdef -D_KERNEL" to remove the mainly #include
related code to support the userland-harness.
2003-04-13 09:02:06 +00:00
phk
708a319e8e
Retire the experimental bio_taskqueue(), it was not quite as usable as
...
hoped. It can be revived from here, should other drivers be able to
use it.
2003-04-12 09:13:01 +00:00
phk
cbe207a30e
Remove all references to BIO_SETATTR. We will not be using it.
2003-04-03 19:19:36 +00:00
phk
15c9ea202d
Fix a bug in the ENOMEM pacing code which probably made it panic systems
...
after a lot of ENOMEM errors.
2003-03-29 22:34:37 +00:00
phk
abd9cc6d2b
Retire the GEOM private statistics code and use devstat instead.
2003-03-18 09:42:33 +00:00
phk
e059b79437
Including <sys/stdint.h> is (almost?) universally only to be able to use
...
%j in printfs, so put a newsted include in <sys/systm.h> where the printf
prototype lives and save everybody else the trouble.
2003-03-18 08:45:25 +00:00