Subject: CVS commit: src/sys/dev/raidframe
To: None <source-changes@NetBSD.org>
From: Greg Oster <oster@netbsd.org>
List: source-changes
Date: 02/05/2005 23:32:44
Module Name:	src
Committed By:	oster
Date:		Sat Feb  5 23:32:44 UTC 2005

Modified Files:
	src/sys/dev/raidframe: rf_reconstruct.c rf_reconstruct.h rf_reconutil.c
	    rf_revent.c rf_revent.h

Log Message:
Vastly improve the error handling in the case of a read/write error
that occurs during a reconstruction.  We go from zero error handling
and likely panicing if something goes amiss, to gracefully bailing and
leaving the system in the best, usable state possible.

- introduce rf_DrainReconEventQueue() to allow easy cleaning of the
reconstruction event queue

- change how we cleanup the floating recon buffers in
rf_FreeReconControl().  Detect the end of the list rather
than traversing according to a count.

- keep track of the number of pending reconstruction writes.  In the
event of a read error, use this to wait long enough for the pending
writes to (hopefully) drain.

- more cleanup is still needed on this code, but I didn't want to
start mixing major functional changes with minor cleanups.

XXX: There is a known issue with pool items left outstanding due to
the IO failure, and this can show up in the form of a panic at the
tail end of a shutdown.  This problem is much less severe than before
these changes, and the hope/plan is that this problem will go away
once this code gets overhauled again.


To generate a diff of this commit:
cvs rdiff -r1.81 -r1.82 src/sys/dev/raidframe/rf_reconstruct.c
cvs rdiff -r1.18 -r1.19 src/sys/dev/raidframe/rf_reconstruct.h
cvs rdiff -r1.23 -r1.24 src/sys/dev/raidframe/rf_reconutil.c
cvs rdiff -r1.19 -r1.20 src/sys/dev/raidframe/rf_revent.c
cvs rdiff -r1.7 -r1.8 src/sys/dev/raidframe/rf_revent.h

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