freebsd-nq/sys
Kirk McKusick 5bb651cb72 This patch fixes a deadlock between the bufdaemon and a process taking
a snapshot. As part of taking a snapshot of a filesystem, the kernel
builds up a list of the filesystem metadata (such as the cylinder
group bitmaps) that are contained in the snapshot. When doing a
copy-on-write check, the list is first consulted. If the block being
written is found on the list, then the full snapshot lookup can be
avoided. Besides providing an important performance speedup this
check also avoids a potential deadlock between the code creating
the snapshot and the bufdaemon trying to cleanup snapshot related
buffers. This fix creates a temporary list containing the key
metadata blocks that can cause the deadlock. This temporary list
is used between the time that the snapshot is first enabled and the
time that the fully complete list is built.

Reported by:	Attila Nagy <bra@fsn.hu>
Sponsored by:   DARPA & NAI Labs.
2003-02-22 00:59:34 +00:00
..
alpha Change the console interface to pass a "struct consdev *" instead of a 2003-02-20 20:54:45 +00:00
amd64 Fix fumble in rev 1.525. pmap_kenter()'s second argument is a physical 2003-02-20 05:35:52 +00:00
arm MB_LEN_MAX is not MD, move it to the MI limits.h. 2002-12-22 06:38:45 +00:00
boot Simplify page alignment. 2003-02-20 06:47:54 +00:00
cam NO_GEOM cleanup: 2003-02-21 19:00:48 +00:00
coda Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
compat Add M_WAITOK 2003-02-20 11:24:55 +00:00
conf Overhaul the targets and hope this is now much more readable. 2003-02-21 11:02:49 +00:00
contrib Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
crypto Remove some unnecessary casts. 2003-01-25 22:41:22 +00:00
ddb - Split the struct kse into struct upcall and struct kse. struct kse will 2003-02-17 05:14:26 +00:00
dev NO_GEOM cleanup: Convert CCD(4) to be use "struct disk*" instead of "dev_t" 2003-02-21 23:25:43 +00:00
fs Do not call smbfs_attr_cacheremove() in the EXDEV case in smbfs_rename(). 2003-02-19 11:54:35 +00:00
geom NO_GEOM cleanup: Convert CCD(4) to be use "struct disk*" instead of "dev_t" 2003-02-21 23:25:43 +00:00
gnu Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
i4b Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
i386 Change the console interface to pass a "struct consdev *" instead of a 2003-02-20 20:54:45 +00:00
ia64 Change the console interface to pass a "struct consdev *" instead of a 2003-02-20 20:54:45 +00:00
isa Switch to using the TSC code in i386/i386/tsc.c. 2003-02-11 11:43:25 +00:00
isofs/cd9660 Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern Missing M_TRYWAIT from so_upcall third argument. 2003-02-21 22:23:40 +00:00
libkern Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
modules Split the arch-specific AGP files into the appropriate files.* and do the same 2003-02-14 06:33:52 +00:00
net Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netatalk Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netatm Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netgraph Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netinet - m = m_gethdr(M_NOWAIT, MT_HEADER); 2003-02-21 23:17:12 +00:00
netinet6 Remove unused variables in the IPSEC case. 2003-02-20 18:22:21 +00:00
netipsec Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netipx Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netkey Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netnatm Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netncp Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netns Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
netsmb Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
nfs Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
nfsclient Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
nfsserver Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
opencrypto Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
pc98 Change the console interface to pass a "struct consdev *" instead of a 2003-02-20 20:54:45 +00:00
pccard Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
pci Fix panic on sparc64 introduced in my last commit. I really 2003-02-19 18:33:29 +00:00
posix4 Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
powerpc Adjust IRQ count for psim's OpenPIC model - it seems to be 2003-02-20 01:59:42 +00:00
rpc
security Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
sparc64 Uncomment the xl(4) driver since it's now working properly 2003-02-20 17:08:42 +00:00
sys NO_GEOM cleanup: Convert CCD(4) to be use "struct disk*" instead of "dev_t" 2003-02-21 23:25:43 +00:00
tools Remove miidevs.h and generate it from miidevs at compile time. 2003-01-19 02:59:34 +00:00
ufs This patch fixes a deadlock between the bufdaemon and a process taking 2003-02-22 00:59:34 +00:00
vm Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
Makefile