Date: Sun, 9 Oct 2005 20:15:15 +0000 (UTC) From: Tor Egge <tegge@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/ufs/ffs ffs_snapshot.c Message-ID: <200510092015.j99KFG0J027537@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
tegge 2005-10-09 20:15:15 UTC
FreeBSD src repository
Modified files:
sys/ufs/ffs ffs_snapshot.c
Log:
Reduce probability for a deadlock that can occur when a snapshot inode is
updated by a process holding the snapshot lock. Another process updating a
different inode in the same inodeblock will do copy on write checks and lock in
the opposite direction.
The snapshot code force a copy on write of these blocks manually (cf. start of
expunge_ufs[12]) and these inode blocks are later put on snapblklist.
This partial fix is to 'drain' the relevant ffs_copyonwrite() operation after
installing new snapblklist. This is not a 100% solution since a failed block
allocation can cause implicit fsync() which might deadlock before the new
snapblklist has been installed.
Revision Changes Path
1.110 +11 -0 src/sys/ufs/ffs/ffs_snapshot.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510092015.j99KFG0J027537>
