cvs commit: src/sys/kern vfs_bio.c vfs_subr.c src/sys/sys buf.h
proc.h src/sys/ufs/ffs ffs_snapshot.c
Christian S.J. Peron
csjp at FreeBSD.org
Thu Sep 29 20:27:12 PDT 2005
Hooooorraay!
On Fri, Sep 30, 2005 at 01:30:02AM +0000, Don Lewis wrote:
> truckman 2005-09-30 01:30:01 UTC
>
> FreeBSD src repository
>
> Modified files:
> sys/kern vfs_bio.c vfs_subr.c
> sys/sys buf.h proc.h
> sys/ufs/ffs ffs_snapshot.c
> Log:
> Un-staticize runningbufwakeup() and staticize updateproc.
>
> Add a new private thread flag to indicate that the thread should
> not sleep if runningbufspace is too large.
>
> Set this flag on the bufdaemon and syncer threads so that they skip
> the waitrunningbufspace() call in bufwrite() rather than than
> checking the proc pointer vs. the known proc pointers for these two
> threads. A way of preventing these threads from being starved for
> I/O but still placing limits on their outstanding I/O would be
> desirable.
>
> Set this flag in ffs_copyonwrite() to prevent bufwrite() calls from
> blocking on the runningbufspace check while holding snaplk. This
> prevents snaplk from being held for an arbitrarily long period of
> time if runningbufspace is high and greatly reduces the contention
> for snaplk. The disadvantage is that ffs_copyonwrite() can start
> a large amount of I/O if there are a large number of snapshots,
> which could cause a deadlock in other parts of the code.
>
> Call runningbufwakeup() in ffs_copyonwrite() to decrement runningbufspace
> before attempting to grab snaplk so that I/O requests waiting on
> snaplk are not counted in runningbufspace as being in-progress.
> Increment runningbufspace again before actually launching the
> original I/O request.
>
> Prior to the above two changes, the system could deadlock if enough
> I/O requests were blocked by snaplk to prevent runningbufspace from
> falling below lorunningspace and one of the bawrite() calls in
> ffs_copyonwrite() blocked in waitrunningbufspace() while holding
> snaplk.
>
> See <http://www.holm.cc/stress/log/cons143.html>
>
> Revision Changes Path
> 1.495 +3 -3 src/sys/kern/vfs_bio.c
> 1.648 +2 -1 src/sys/kern/vfs_subr.c
> 1.190 +1 -0 src/sys/sys/buf.h
> 1.436 +1 -1 src/sys/sys/proc.h
> 1.104 +16 -4 src/sys/ufs/ffs/ffs_snapshot.c
--
Christian S.J. Peron
csjp at FreeBSD.ORG
FreeBSD Committer
FreeBSD Security Team
More information about the cvs-src
mailing list