freebsd-skq/sys/nfsclient
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
..
bootp_subr.c consolidate parsing of nfs root mount options in one place 2006-12-06 02:15:25 +00:00
krpc_subr.c MFp4: use the function to fix the packet header length instead of rolling 2005-03-16 08:13:08 +00:00
krpc.h
nfs_bio.c Introduce a field to struct vm_page for storing flags that are 2006-08-09 17:43:27 +00:00
nfs_diskless.c consolidate parsing of nfs root mount options in one place 2006-12-06 02:15:25 +00:00
nfs_lock.c Fix typos in comment. 2006-08-16 23:53:05 +00:00
nfs_lock.h For reasons unknown, the nfs locking code used a fifo to send requests to 2004-12-06 08:31:32 +00:00
nfs_nfsiod.c Since NFSv4 is not SMP safe, nfsiod needs to acquire Giant for NFSv4 mounts 2006-05-24 23:06:50 +00:00
nfs_node.c In nfs_nget(), we must initialize the fh in the nfsnode before inserting the 2006-11-29 02:21:40 +00:00
nfs_socket.c NetApp filers return corrupt post op attrs in the wcc on NFS error responses. 2006-12-11 19:54:25 +00:00
nfs_subs.c Fixes up the handling of shared vnode lock lookups in the NFS client, 2006-09-13 18:39:09 +00:00
nfs_vfsops.c consolidate parsing of nfs root mount options in one place 2006-12-06 02:15:25 +00:00
nfs_vnops.c Cylinder group bitmaps and blocks containing inode for a snapshot 2007-01-23 10:01:19 +00:00
nfs.h 1) Fix up locking in nfs_up() and nfs_down. 2006-11-20 04:14:23 +00:00
nfsargs.h Fix a serious deadlock with the NFS client. Given a large enough 2005-06-10 23:50:41 +00:00
nfsdiskless.h consolidate parsing of nfs root mount options in one place 2006-12-06 02:15:25 +00:00
nfsm_subs.h fix a problem with XID re-use when a server returns NFSERR_JUKEBOX. 2005-11-21 18:39:18 +00:00
nfsmount.h Refactor the NFS over UDP retransmit timeout estimation logic to allow 2006-05-23 18:33:58 +00:00
nfsnode.h Fixes up the handling of shared vnode lock lookups in the NFS client, 2006-09-13 18:39:09 +00:00
nfsstats.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
nlminfo.h - Fix leak of struct nlminfo on process exit. 2005-10-26 07:18:37 +00:00