diff options
| author | sommerfe <sommerfe@NetBSD.org> | 1999-03-22 17:24:19 +0000 |
|---|---|---|
| committer | sommerfe <sommerfe@NetBSD.org> | 1999-03-22 17:24:19 +0000 |
| commit | 36dc99adac6f7c01c39b37b3b85ced6549fb9179 (patch) | |
| tree | f1fabc62ecc607a2decd2a453e74ca2b1a12af88 /sys/dev/microcode | |
| parent | 6d0f67d6aac3a35a8b0ae3486dbacdf22e186c8c (diff) | |
vinvalbuf, called from vclean, could cause a locking-against-self
deadlock in VOP_FSYNC() if the unreferenced vnode picked for
reclamation happened to be stacked on top of a vnode the process
already had locked. This could happen if the same filesystem was
accessed both through a union mount and directly; it seemed to happen
most frequently when the direct access was through NFS.
Avoid this deadlock by changing vinvalbuf to pass a new FSYNC_RECLAIM
flag bit to VOP_FSYNC() to indicate that a reclaim is in progress and
only a `shallow' fsync is necessary.
Do nothing in *_fsync() in umapfs, nullfs, and unionfs when
FSYNC_RECLAIM is set; the underlying vnodes will shortly be released
in *_reclaim and may be reclaimed (and fsync'ed) later.
Diffstat (limited to 'sys/dev/microcode')
0 files changed, 0 insertions, 0 deletions
