freebsd-nq/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
geom_apple.c
geom_bsd_enc.c
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
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
geom_gpt.c Add BIO_FLUSH support to GPT class. 2006-11-01 12:29:49 +00:00
geom_int.h
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
geom_mbr_enc.c
geom_mbr.c
geom_pc98_enc.c
geom_pc98.c
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
geom_sunlabel.c
geom_vfs.c Cylinder group bitmaps and blocks containing inode for a snapshot 2007-01-23 10:01:19 +00:00
geom_vfs.h
geom_vol_ffs.c
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