freebsd-skq/sys/geom
pjd 6fa8fbd029 GEOM has an internal mechanism to deal with ENOMEM errors returned via
g_io_deliver(). In such case it increases 'pace' counter on each ENOMEM and
reschedules the request. The 'pace' counter is decreased for each request going
down, but until 'pace' is greater than zero, GEOM will handle at most 10
requests per second. For GEOM GATE users that are proxy to local GEOM providers
(like ggatel(8) and HAST) we can end up with almost permanent slow down of GEOM
down queue. This is because once we reach GEOM GATE queue limit, we return
ENOMEM to the GEOM. This means that we have, eg. 1024 I/O requests in the GEOM
GATE queue. To make room in the queue and stop returning ENOMEM we need to
proceed the requests of course, but those requests are handled by userland
daemons that handle them by reading/writing also from/to local GEOM providers.
For example with HAST, a new requests comes to /dev/hast/data, which is GEOM
GATE provider. GEOM GATE passes the request to hastd(8) and hastd(8)
reads/writes from/to /dev/da0. Once we reach GEOM GATE queue limit, to free up
a slot in GEOM GATE queue, hastd(8) has to read/write from/to /dev/da0, but
this request will also be very slow, because GEOM now slows down all the
requests. We end up with full queue that we can unload at the speed of 10
requests per second. This simply looks like a deadlock.

Fix it by allowing userland daemons that work with both GEOM GATE and local
GEOM providers to specify unlimited queue size, so GEOM GATE will never return
ENOMEM to the GEOM.

MFC after:	1 week
2011-04-02 06:56:06 +00:00
..
bde Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
cache Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
concat Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
eli Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
gate GEOM has an internal mechanism to deal with ENOMEM errors returned via 2011-04-02 06:56:06 +00:00
journal Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
label Some linux distros put mount point into the ext2fs labels, such as '/', or 2011-03-08 17:00:31 +00:00
linux_lvm Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
mirror Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
mountver Make sure not to pass NULL to g_orphan_provider(). 2010-06-05 08:00:52 +00:00
multipath Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
nop Remove unneeded checks, g_new_xxx functions can not return NULL. 2011-03-31 06:30:59 +00:00
part Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
raid Bunch of small bugfixes and cleanups. 2011-03-31 16:19:53 +00:00
raid3 Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
sched Fix typos - remove duplicate "the". 2011-02-21 09:01:34 +00:00
shsec Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
stripe Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
uzip Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
vinum - Check flag with the bitwise operator, not the logical operator. 2010-10-01 06:12:13 +00:00
virstor Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
zero In g_zero_destroy_geom(), return 0 instead of EBUSY in the success case. 2010-05-10 19:08:53 +00:00
geom_aes.c
geom_bsd_enc.c Decode as many or as few partition entries as the label claims there 2007-12-09 22:44:22 +00:00
geom_bsd.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom_ccd.c - Fix a potential NULL pointer reference. Note that this should not happen in 2008-11-25 20:28:33 +00:00
geom_ctl.c Finish r210923, 210926. Mark some devices as eternal. 2011-01-04 10:59:38 +00:00
geom_ctl.h
geom_dev.c MFgraid/head r217827: 2011-03-24 08:37:48 +00:00
geom_disk.c MFgraid/head r218212, r218257: 2011-03-24 19:23:42 +00:00
geom_disk.h Add the disk ident and a human-meaningful description (here, the disk model 2011-02-26 14:58:54 +00:00
geom_dump.c Escape characters unsafe for XML output in GEOM class, instance and 2010-03-20 16:16:13 +00:00
geom_event.c Use g_eventlock to protect against losing wakeups in the g_event process 2010-11-22 16:47:53 +00:00
geom_fox.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom_int.h
geom_io.c Correct bioq_disksort so that bioq_insert_tail() offers barrier semantic. 2010-09-02 19:40:28 +00:00
geom_kern.c Use g_eventlock to protect against losing wakeups in the g_event process 2010-11-22 16:47:53 +00:00
geom_mbr_enc.c
geom_mbr.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom_pc98_enc.c
geom_pc98.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom_redboot.c - Give geom_redboot taste of flash/spi. Now there is another provider 2010-02-03 01:12:19 +00:00
geom_slice.c Change the way in which zero stripesize is handled. Instead of reporting 2010-01-06 13:14:37 +00:00
geom_slice.h
geom_subr.c Fix deadlock between GEOM class unloading and withering. Withering can't 2010-05-05 18:53:24 +00:00
geom_sunlabel_enc.c
geom_sunlabel.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom_vfs.c Fix typos - remove duplicate "the". 2011-02-21 09:01:34 +00:00
geom_vfs.h Remove the struct thread unuseful argument from bufobj interface. 2008-10-10 21:23:50 +00:00
geom_vol_ffs.c Add some FEATURE macros for various GEOM classes. 2011-02-25 10:24:35 +00:00
geom.h MFgraid/head r218212, r218257: 2011-03-24 19:23:42 +00:00
notes