Subject: CVS commit: src/sys/dev/raidframe
To: None <source-changes@NetBSD.org>
From: Greg Oster <oster@netbsd.org>
List: source-changes
Date: 03/20/2004 04:22:05
Module Name:	src
Committed By:	oster
Date:		Sat Mar 20 04:22:05 UTC 2004

Modified Files:
	src/sys/dev/raidframe: rf_dag.h rf_dagdegwr.c rf_dagffwr.c
	    rf_dagutils.c rf_dagutils.h rf_driver.c rf_layout.h rf_map.c
	    rf_map.h rf_netbsd.h rf_raid.h

Log Message:
For each RAID set, pre-allocate a number of "emergency buffers" to be
used in the event that we can't malloc a buffer of the appropriate
size in the traditional way.  rf_AllocIOBuffer() and rf_FreeIOBuffer()
deal with allocating/freeing these structures.  These buffers are
stored in a list on the 'iobuf' list.  iobuf_count keeps track of how
many buffers are available, and numEmergencyBuffers is the effective
"high-water" mark for the freelist.  The buffers allocated by
rf_AllocIOBuffer() are stripe-unit sized, which is the maximum
size requested by any of the callers.

Add an iobufs entry to RF_DagHeader_s.  Use it for keeping track of
buffers that get allocated from the free-list.

Add a "generic list" pool (VoidPointerListElement Pool) for elements
used to maintain a list of allocated memory.  [It is somewhat less
than ideal to add another little pool to handle this...]

Teach rf_AllocBuffer() to use the new rf_AllocIOBuffer().  Modify
other Mallocs to use rf_AllocIOBuffer(), and to update dag_h->iobufs as
appropriate.

Update rf_FreeDAG() to handle cleanup of dag_h->iobufs.

While here, add some missing pool_destroy() calls for a number of pools.

With these changes, it should (in theory) be possible to swap on
RAID 5 sets again.  That said, I've not had any success there yet --
but the last issue I saw at least wasn't in RAIDframe. :-}

[There is room for this code to become a bit more consise, but I
wanted to do a checkpoint here with something known to work :) ]


To generate a diff of this commit:
cvs rdiff -r1.14 -r1.15 src/sys/dev/raidframe/rf_dag.h
cvs rdiff -r1.19 -r1.20 src/sys/dev/raidframe/rf_dagdegwr.c
cvs rdiff -r1.22 -r1.23 src/sys/dev/raidframe/rf_dagffwr.c
cvs rdiff -r1.40 -r1.41 src/sys/dev/raidframe/rf_dagutils.c
cvs rdiff -r1.12 -r1.13 src/sys/dev/raidframe/rf_dagutils.h
cvs rdiff -r1.96 -r1.97 src/sys/dev/raidframe/rf_driver.c
cvs rdiff -r1.13 -r1.14 src/sys/dev/raidframe/rf_layout.h
cvs rdiff -r1.36 -r1.37 src/sys/dev/raidframe/rf_map.c
cvs rdiff -r1.10 -r1.11 src/sys/dev/raidframe/rf_map.h
cvs rdiff -r1.18 -r1.19 src/sys/dev/raidframe/rf_netbsd.h
cvs rdiff -r1.31 -r1.32 src/sys/dev/raidframe/rf_raid.h

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