Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/ufs



Module Name:    src
Committed By:   perseant
Date:           Wed Mar 23 00:12:51 UTC 2005

Modified Files:
        src/sys/ufs/lfs: lfs_alloc.c lfs_vnops.c
        src/sys/ufs/ufs: ufs_vnops.c

Log Message:
Make LFS dirops get their vnode first, before incrementing the dirop count,
to prevent a deadlock trying to call VOP_PUTPAGES() on a VDIROP vnode.
This can happen when a stacked filesystem is mounted on top of an LFS: an
LFS dirop needs to get a vnode, which is available from the upper layer.
The corresponding lower layer vnode, however, is VDIROP, so the upper layer
can't be cleaned out since its VOP_PUTPAGES() is passed through to the lower
layer, which waits for dirops to drain before it can proceed.  Deadlock.

Tweak ufs_makeinode() and ufs_mkdir() to pass the a_vpp argument through
to VOP_VALLOC().

Partially addresses PR # 26043, though it probably does not completely fix
the problem described there.


To generate a diff of this commit:
cvs rdiff -r1.76 -r1.77 src/sys/ufs/lfs/lfs_alloc.c
cvs rdiff -r1.137 -r1.138 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -r1.126 -r1.127 src/sys/ufs/ufs/ufs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index