cvs commit: src/sys/ufs/ffs ffs_softdep.c
Jeff Roberson
jroberson at chesapeake.net
Sun Aug 31 00:33:44 PDT 2003
I tested these changes on a machine that was tuned down to 64MB to
increase buf churn. I haven't observed any LORs or anything of that
nature. It is somewhat tricky though, so if you encounter any problems,
feel free to yell.
Cheers,
Jeff
On Sun, 31 Aug 2003, Jeff Roberson wrote:
> jeff 2003/08/31 00:29:34 PDT
>
> FreeBSD src repository
>
> Modified files:
> sys/ufs/ffs ffs_softdep.c
> Log:
> - Don't acquire the vnode interlock in drain_output(). Instead, require the
> caller to acquire it. This permits drain_output() to be done atomically
> with other operations as well as reducing the number of lock operations.
> - Assert that the proper locks are held in drain_output().
> - Change getdirtybuf() to accept a mutex as an argument. This mutex is used
> to protect the vnode's buf list and the BKGRDWAIT flag. This lock is
> dropped when we successfully acquire a buffer and held on return
> otherwise. These semantics reduce the number of cumbersome cases in
> calling code.
> - Pass the mtx from getdirtybuf() into interlocked_sleep() and allow this
> mutex to be used as the interlock argument to BUF_LOCK() in the LOCKBUF
> case of interlocked_sleep().
> - Change the return value of getdirtybuf() to be the resulting locked buffer
> or NULL otherwise. This is for callers who pass in a list head that
> requires a lock. It is necessary since the lock that protects the list
> head must be dropped in getdirtybuf() so that we don't have a lock order
> reversal with the buf queues lock in bremfree().
> - Adjust all callers of getdirtybuf() to match the new semantics.
> - Add a comment in indir_trunc() that points at unlocked access to a buf.
> This may also be one of the last instances of incore() in the tree.
>
> Revision Changes Path
> 1.141 +77 -53 src/sys/ufs/ffs/ffs_softdep.c
>
More information about the cvs-src
mailing list