freebsd-dev/sys/geom
Konstantin Belousov 2cc7d26f7f Cylinder group bitmaps and blocks containing inode for a snapshot
file are after snaplock, while other ffs device buffers are before
snaplock in global lock order. By itself, this could cause deadlock
when bdwrite() tries to flush dirty buffers on snapshotted ffs. If,
during the flush, COW activity for snapshot needs to allocate block
and ffs_alloccg() selects the cylinder group that is being written
by bdwrite(), then kernel would panic due to recursive buffer lock
acquision.

Avoid dealing with buffers in bdwrite() that are from other side of
snaplock divisor in the lock order then the buffer being written. Add
new BOP, bop_bdwrite(), to do dirty buffer flushing for same vnode in
the bdwrite(). Default implementation, bufbdflush(), refactors the code
from bdwrite(). For ffs device buffers, specialized implementation is
used.

Reviewed by:	tegge, jeff, Russell Cattelan (cattelan xfs org, xfs changes)
Tested by:	Peter Holm
X-MFC after:	3 weeks (if ever: it changes ABI)
2007-01-23 10:01:19 +00:00
..
bde Commit the results of the typo hunt by Darren Pilgrim. 2006-08-04 07:56:35 +00:00
cache A GEOM cache can speed up read performance by sending fixed size 2006-10-06 08:27:07 +00:00
concat Implement BIO_FLUSH handling by simply passing it down to the components. 2006-10-31 21:23:51 +00:00
eli I want CPU number here. 2006-11-02 09:01:34 +00:00
gate Bump copyright year. 2006-09-08 10:20:44 +00:00
journal Softc may be NULL in g_journal_orphan(), so don't be surprised. 2006-12-02 09:10:29 +00:00
label Remove trailing spaces. 2006-09-30 08:16:49 +00:00
mirror Now, that we have gjournal in the tree add possibility to configure 2006-11-01 22:51:49 +00:00
nop Remove trailing spaces. 2006-09-30 08:16:49 +00:00
raid3 Now, that we have gjournal in the tree add possibility to configure 2006-11-01 22:51:49 +00:00
shsec Add BIO_FLUSH support to GSHSEC class. 2006-11-01 12:30:51 +00:00
stripe Change spaces to tabs where needed. 2006-11-01 22:16:53 +00:00
uzip Rename geom_uzip class to g_uzip in order to be consistent with the naming 2006-01-22 15:35:14 +00:00
vinum while (0); -> while (0) in multi-line macros 2006-08-17 22:50:33 +00:00
zero Remove trailing spaces. 2006-02-01 12:06:01 +00:00
geom_aes.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_apple.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_bsd_enc.c /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 18:27:30 +00:00
geom_bsd.c Remove the trailing half of a sentence which was clearly superceded 2006-05-24 11:02:32 +00:00
geom_ccd.c Make CCD be able to read and write Linux software raids. 2006-04-13 20:35:31 +00:00
geom_ctl.c Change gctl_set_param() to return an error instead of setting an 2006-04-07 16:19:48 +00:00
geom_ctl.h
geom_dev.c In g_dev_strategy(), when failing an IO request with EINVAL due to 2006-06-18 22:01:15 +00:00
geom_disk.c Add a new disk flag - DISKFLAG_CANFLUSHCACHE, which indicates that the disk 2006-10-31 21:12:43 +00:00
geom_disk.h Add a new disk flag - DISKFLAG_CANFLUSHCACHE, which indicates that the disk 2006-10-31 21:12:43 +00:00
geom_dump.c Make the kern.geom.conftxt sysctl more usable by also dumping the 2005-11-12 20:02:02 +00:00
geom_event.c Delay an orphan event if provider has still in-flight I/O requests. 2006-09-10 09:11:54 +00:00
geom_fox.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_gpt.c Add BIO_FLUSH support to GPT class. 2006-11-01 12:29:49 +00:00
geom_int.h Use unit number allocation functions for GEOM minor numbers. 2004-10-25 12:28:28 +00:00
geom_io.c Add a new I/O request - BIO_FLUSH, which basically tells providers below to 2006-10-31 21:11:21 +00:00
geom_kern.c Add sysctl descriptions. 2005-11-25 10:09:30 +00:00
geom_mbr_enc.c /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 18:27:30 +00:00
geom_mbr.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_pc98_enc.c Fix signed vs unsigned warning. 2005-05-01 09:44:50 +00:00
geom_pc98.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_slice.c Implement BIO_FLUSH handling by simply passing it down to the components. 2006-10-31 21:23:51 +00:00
geom_slice.h Allow to use g_slice_orphan() from outside. 2006-02-18 11:21:17 +00:00
geom_subr.c Add 'show geom [addr]' ddb(4) command, which prints entire GEOM topology if 2006-09-15 16:36:45 +00:00
geom_sunlabel_enc.c Support VTOC volume names. This can be useful to distinguish multiple 2005-03-30 09:33:10 +00:00
geom_sunlabel.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom_vfs.c Cylinder group bitmaps and blocks containing inode for a snapshot 2007-01-23 10:01:19 +00:00
geom_vfs.h Make various random things static 2005-02-10 12:10:35 +00:00
geom_vol_ffs.c Don't pass error value pointer to g_read_data(9) at all if we don't 2005-11-30 22:15:00 +00:00
geom.h Add a new I/O request - BIO_FLUSH, which basically tells providers below to 2006-10-31 21:11:21 +00:00
notes For removable devices without media we set a zero mediasize but a non-zero 2004-09-05 21:15:58 +00:00