Commit Graph

165 Commits

Author SHA1 Message Date
oster 3b488c3f27 Fix an off-by-one error when autoconfig is hunting for a free RAID
device in the rare event that the one it wants is already in use.
Thanks to Wolfgang Stukenbrock for noticing the bug and filing the PR.
This fix addresses PR#14862.
2001-12-16 22:57:32 +00:00
lukem 371fd3fc10 use #ifdef RAID_AUTOCONFIG (for consistency with the rest of the kernel) 2001-11-28 05:39:13 +00:00
lukem 2565646230 don't need <sys/types.h> when including <sys/param.h> 2001-11-15 09:47:59 +00:00
lukem a3746e00b7 add RCSIDs 2001-11-13 07:11:12 +00:00
oster 525f4a9bed Backout a line that accidentally got included when the .h reorg went in. 2001-10-06 00:47:46 +00:00
oster 765e00d3de Step 2 of the disentanglement. We now look to <dev/raidframe/*> for
the stuff that used to live in rf_types.h, rf_raidframe.h, rf_layout.h,
rf_netbsd.h, rf_raid.h, rf_decluster,h, and a few other places.
Believe it or not, when this is all done, things will be cleaner.

No functional changes to RAIDframe.
2001-10-04 15:58:51 +00:00
oster 99020323e6 Nuke the 5 NULL parameters from rf_DoAccess(). Observe that 4 of
the variables are passed directly to rf_AllocRaidAccDesc(), and the 5th
isn't even used.  Hunt them down and nuke them too.
2001-07-27 03:30:07 +00:00
thorpej cf56c44a86 bzero -> memset 2001-07-18 06:45:33 +00:00
oster 81f5c58b58 If we're closing the last partition on a RAID set and the system is
being shutdown, then unconfigure the RAID set too.  This fixes a number
of issues with doing proper unconfigures/shutdowns of multi-level RAID
sets.

Thanks to Jason Thorpe and Bill Squier for the ideas/suggestions on
how/where to do this, and to Bill Squier for testing.
2001-07-16 15:50:27 +00:00
oster bdfad3793f We don't need to check for raidautoconfig here, so nuke it and
clean up a little.
2001-06-21 03:07:04 +00:00
oster 856e0a920e A value of 1 for tracks/cylinder in the disklabel is apparently sub-optimal.
Thus we choose "4 * number_of_columns" as a more reasonable
value (until someone comes up with something better).
This pretends to properly address PR#11989.
2001-04-05 02:48:51 +00:00
oster cc2a28f2c0 Un-'__P'ify. 2001-01-27 20:42:20 +00:00
fvdl d040bd5908 Return error in the case of using ODIOCGDINFO or ODIOCGDEFLABEL when
the number of partitions is > OLDMAXPARTITIONS. This is better
than silently truncating the label (don't want to silently throw
away partitions when using an old disklabel binary on a label with
> 8 partitions). From Enami Tsugutomo.
2001-01-08 02:03:45 +00:00
fvdl e2d1c1f926 Adapt all disk devices in MI directories to handle ODIOC* calls
for ports that have bumped MAXPARTITIONS (and thus define
__HAVE_OLD_DISKLABEL).
2001-01-07 18:09:01 +00:00
oster 7a8eea351b Fix a couple of warnings about uninitialized variables. Thanks go to
Frank van der Linden for pointing these out.
2000-12-05 01:35:56 +00:00
chs c62d17a551 rationalize the use of b_flags for geteblk() buffers.
rather than assigning to the whole field, set or clear individual flags,
which implies that the B_BUSY and B_INVAL flags will remain set.
this allows us to make the assertion in brelse() that B_BUSY is set,
which is the purpose of all this.
2000-11-20 08:24:08 +00:00
oster d349cdf1ef Move disk_busy() and disk_unbusy() to more sane locations. Values
reported by 'systat iostat' and friends are now much more correct for
RAIDframe devices.  Thanks to Andrew Doran for poking me about this,
and for suggestions on and review of the changes.
2000-10-20 02:24:45 +00:00
oster f9a49b32bf Don't touch a failed component at all. Thanks to Robert Elz (kre) for
noting the problem and providing additional comments.
2000-10-17 03:39:41 +00:00
oster 014e17fbdc Correct a few calls to VOP_CLOSE(). 2000-09-21 01:37:35 +00:00
oster 3fa62c4642 Make sure we are passing a locked vp to VOP_CLOSE. 2000-09-08 01:36:35 +00:00
oster 49742b54fa Remove a bogus VOP_UNLOCK. 2000-08-19 18:20:07 +00:00
oster 3a17c9470d Don't try to initialize a component label on a failed component. 2000-08-19 18:07:36 +00:00
oster dc4b749234 Fix the status reporting for copybacks. Thanks to Hubert Feyrer for
reporting the problem.
2000-07-14 15:26:29 +00:00
oster 6dcc553fae Remove outdated comment. 2000-06-04 02:16:05 +00:00
oster 0b63accce0 Merge rf_update_component_labels() and rf_final_update_component_labels(). 2000-06-04 02:05:13 +00:00
oster 2c127bf249 Allow getting a component label from a spare disk. 2000-06-03 16:44:43 +00:00
matt c9aff328d9 Make booted_device global (and booted_parition for consitency).
Eliminate it from header files and other extern definitions.
2000-06-01 00:49:49 +00:00
oster 8e82dfa363 For a RAID 1 set that has N components, allow the set to auto-configure as
long as at least one of the master or the mirror is available for each
of the N/2 'rows' of the set. (No, RAIDframe doesn't do N-way mirroring..)
Thanks to Manuel Bouyer for noting the problem.
2000-05-30 03:29:49 +00:00
oster c11100526b Don't let the autodetection code get tripped up by negative mod-counters. 2000-05-29 02:57:34 +00:00
oster f329fb84ad We need to be slightly more clever during auto-configuration, to make
sure that we a) don't ignore components with correct mod-counters, and
b) do ignore components with bogus mod-counters.
2000-05-28 05:23:41 +00:00
oster e38b4355e2 Abort any parity re-writes before unconfiguring a RAID set.
Partially addresses PR#10182.
2000-05-28 03:00:31 +00:00
oster 228570e110 When setting auto-config/rootable bits, only try to update the
component label if the component is actually alive.
2000-05-28 01:03:22 +00:00
oster 1aaf6772f1 - Add a mechanism for obtaining finer-grained 'progress' information
regarding reconstructs, copybacks, etc.

- RAID 0 doesn't do copybacks, but don't make raidctl sweat about it.
2000-05-28 00:48:30 +00:00
oster 26b4598736 Components which match on everything but the mod_counter are
renegades, and must be handled correctly.  In particular, they should
be added to their old auto-config set, but then immediately released.
Failing to do otherwise means that they potentialy end up in a
different (and competing!) RAID set which may auto-configure in place
of the correct one, and cause all sorts of chaos at auto-configure
time.
2000-05-27 20:29:14 +00:00
oster e9b5b7aa5e Add a comment to clarify why we actually want the component label to
be considered a 'match' even if the mod_counter is wrong.
2000-05-27 19:12:03 +00:00
oster d2b2ed0970 Checking parity re-write status makes no sense on RAID 0, but let's
return something reasonable anyway.
2000-05-27 18:23:27 +00:00
thorpej 071aed40ac A foolish consistency; most parts of the kernel use bp->b_data, so
change these from bp->b_un.b_addr to bp->b_data, as well.  This also
allows us more flexibility to experiment with other data buffer types
hung off of struct buf.
2000-05-19 18:54:22 +00:00
minoura c2e8f67477 Add some missing casts of ioctl arg.
Obviously autoconfiguration wouldn't work on big-endian machines.
2000-05-19 04:53:25 +00:00
oster db11351ced Make sure the config structure allocated during autoconfiguration actually
gets initialized properly.  Should fix PR#9816.
2000-04-27 00:57:48 +00:00
oster cf0b47bd0e Minor cleanup of unneeded verbosity. 2000-03-31 02:05:24 +00:00
oster cd61979606 Print out the 'root' status of a RAID set during autoconfiguration. 2000-03-31 01:20:43 +00:00
augustss 169ac5b3c1 Remove register declarations. 2000-03-30 12:41:09 +00:00
oster 2ee63332b3 Add bits for eventual support of deleteing components and moving
hot-spares into the main set.
2000-03-26 22:38:28 +00:00
oster e44151e8d6 Fix up some autoconfigure messages. In particular, don't try printing
the value of an uninitialized variable.  Noted by Luke Mewburn.
2000-03-22 01:41:41 +00:00
oster 7f288b4e0d Just return "100% done" when asked about reconstruction progress on
a RAID0 set.
2000-03-20 22:59:26 +00:00
oster 7c57ac56d7 Cleanup a couple of function declarations. No functional changes. 2000-03-07 03:09:47 +00:00
oster 51ffb0924c Create a new rf_close_component() to handle vnode operations for closing
components.  Teach rf_UnconfigureVnodes() how to use it, and tell
the copyback and reconstruction code about it too.
2000-03-07 02:59:50 +00:00
oster ddebc1cad0 Move rf_UnconfigureVnodes to rf_netbsdkintf.c where it will be more at home.
Add prototype to rf_kintf.h, and nuke old prototypes from rf_disks.c and
rf_driver.c .
2000-03-07 02:28:05 +00:00
oster 33a55d022b rf_ protect the component label print routine, and make it more easily
available to the rest of RAIDframe.
2000-03-07 02:12:13 +00:00
oster 1231bd6d14 Umm... don't allow attempts to configure the same RAID device multiple times.
The check was there, but the return() was missing :(
2000-03-04 06:03:21 +00:00
oster 87f46374bb Minor cleanup. No functional changes. 2000-03-03 01:46:36 +00:00
oster 8c46e74418 Nuke some debugging output that got left in by mistake. 2000-02-27 02:35:33 +00:00
oster 82419f5ae9 Only mark the components as CLEAN if it's the last thing we're doing.
Marking them CLEAN earlier is (currently) asking for trouble.
(XXX This could have been done more elegantly.)
2000-02-27 01:50:22 +00:00
oster d9c47013b2 Defopt 'RAID_AUTOCONFIG'. Adding 'options RAID_AUTOCONFIG' turns on
the component auto-detection and auto-configuration of RAID sets.
Also, add "#options RAID_AUTOCONFIG" to the GENERIC config files.
2000-02-26 17:35:33 +00:00
oster caa3932441 Minor cleanups. Remove extra debugging printouts. 2000-02-25 20:11:00 +00:00
oster 21243f6205 - ignore the mod_counter when checking to see if a component fits with the
rest of an autoconfig set.
- minor cleanups
2000-02-25 19:56:56 +00:00
oster a4f7f062fd - cleanup raidinit()
- cleanup rf_mountroot_hooks()
- various other cleanups.
2000-02-25 02:42:30 +00:00
oster 5716b5d6d1 Be *slightly* more consistent about the use of num and numraid in raidattach(). 2000-02-25 02:21:12 +00:00
oster 99f070bab8 - mod_counter needs to get incremented more often.
- use raid_init_component_labels instead of hand-rolling a component_label.
(missed doing this for the rf_used_spare case when updating component labels).
- fix serial number initialization in raid_init_component_labels
2000-02-24 01:23:05 +00:00
oster d91ecfbcfd Be more aggressive about updating component labels in the event
of a real component failure (or a simulated failure):
- add 'numNewFailures' to keep track of the number of disk failures
since mod_counter was last updated for each component label.
- make sure we call rf_update_component_labels() upon any component failure,
real or simulated.
2000-02-23 03:44:02 +00:00
oster e7f3dc2ec9 blockSize for the component label is already set correctly here. 2000-02-23 02:11:05 +00:00
oster 0c43bf18f0 - cleanup of more component label code
- make current default label values available everywhere
- make sure numBlocks and blockSize in component labels get initialized
for all component labels
- check for component size to be smaller than or equal to the partition size
when autoconfiguring
2000-02-23 02:04:21 +00:00
oster 214822e08c Note the fact that the first arg of raidinit() may be bogus in
the autoconfig case (the value of the first arg never gets used, but...).
2000-02-22 23:13:15 +00:00
oster e8ff7f6155 Bounds-check the 'last unit' a little more closely. 2000-02-22 16:07:02 +00:00
oster bd2230fd09 - implement additional component checking before autoconfiguration
- make component label setting work again(!!!!)
2000-02-22 03:38:42 +00:00
oster afccbaa6d7 Umm.. let's set 'numraid' to something useful before we try to use it. 2000-02-21 23:33:45 +00:00
oster 7deba340d7 Some of these function names are bad enough that no one else would probably
pick them, but preface them with rf_ anyway.
2000-02-16 01:10:44 +00:00
oster 445591e874 Get recent changes into the tree:
- make component_label variables more consistent (==> clabel)
- re-work incorrect component configuration code
- re-work disk configuration code
- cleanup initial configuration of raidPtr info
- add auto-detection of components and RAID sets (Disabled, for now)
- allow / on RAID sets (Disabled, for now)
- rename "config_disk_queue" to "rf_ConfigureDiskQueue" and properly prototype
in rf_diskqueue.h
- protect some headers with #if _KERNEL  (XXX this needs to be fixed properly)
  and cleanup header formatting.
- expand the component labels (yes, they should be backward/forward compatible)
- other bits and pieces (some function names are still bogus, and will get
changed soon)
2000-02-13 04:53:57 +00:00
thorpej dc59bc1db3 Update for sys/buf.h/disksort_*() changes. 2000-01-21 23:39:55 +00:00
oster 7ce0db89f9 Nuke more debugging stuff and cleanup a tad. 2000-01-09 03:39:13 +00:00
oster 23c4c71c8f By popular demand (Hi Thor!) make the cylinder size in a default
disklabel be the size of the (data part) of the stripe.
2000-01-09 02:56:13 +00:00
oster c8730b35e6 - move a bunch of function prototypes to rf_kintf.h
- general cleanup of a number of prototypes that were scattered around.
2000-01-09 01:29:27 +00:00
oster db96c5344b Nuke some (now) incorrect comments. More minor cleanup. 2000-01-08 02:04:06 +00:00
oster ef979643a7 Replace raidPtrs[unit] with just raidPtr, and assign the former to the
later early on in raidioctl().  Code is easier to read now too.
2000-01-08 01:52:42 +00:00
oster b9a1fe405c Minor tillage on the raidioctl() stuff. More cleanup to follow.
No functional changes.
2000-01-08 01:37:37 +00:00
oster 91273673e7 In RAIDFRAME_CONFIGURE, don't set values in raidPtrs[unit] unless
the configuration was successful.  Noted by Peter Galbavy of OpenBSD.
2000-01-07 13:57:20 +00:00
oster 51380e0e8c - bail if we can't allocate memory for raid_softc's. Set 'numraid' as
appropriate for that condition.
- nuke some debugging stuff that we hope we'll never need again
- minor cleanups
2000-01-06 02:06:41 +00:00
oster d4dfa2a664 Make sure we really get something back from RF_Malloc before we use it. 2000-01-05 04:15:30 +00:00
oster 77ab4d1598 - update RF_CREATE_THREAD to handle a 'process name' argument.
- fire up a new thread for parity re-writes, copybacks, and reconstructs.
  The ioctl's which trigger these actions now return immediately.
- add progress accounting for the above actions.
- minor rototillage of rf_netbsdkintf.c to deal with all of the above.
2000-01-05 02:57:28 +00:00
oster 28c2380f21 Nuke a bunch of debugging cruft. No functional changes. 1999-12-15 02:02:16 +00:00
oster fe0726b921 Whoops! Neglected to initialize the buffer queues for anything other
than raid0.  Fix that...
1999-12-14 15:27:00 +00:00
oster e8a639b1df Rototill the IO throttle code. Rename rf_DoAccessKernel() to raidstart()
and cleanup arguments.  While we're here, cleanup raidstrategy(), and nuke
a bunch of unused debugging stuff.

RAIDframe + softdeps now play very nicely together.
1999-12-12 20:51:41 +00:00
oster a038f90588 Kernel memory is not to be wasted. If we're bailing out because of an error,
give any allocated memory back to the kernel so someone else can use it.
1999-12-03 03:06:44 +00:00
oster 3888a71ad1 Move LIST_INIT() to a more appropriate place. 1999-12-03 02:43:22 +00:00
oster 5fd68b5d02 We must initialize bp->b_dep in InitBP(). 1999-11-18 13:28:06 +00:00
oster e589155692 Remove some minor stuff that wasn't right, and wasn't even really used. 1999-11-17 01:16:37 +00:00
oster 07cc4855f1 Minor cleanup. No functional changes. 1999-08-14 23:34:18 +00:00
oster 740b9848cc Decrease the number of outstanding IO's threashold slightly.
The previous value may have been too high in some instances.
1999-08-14 03:47:07 +00:00
oster 6409e641a6 Remove a 'struct proc *'-passing abomination that's been bugging me
for quite some time.
1999-08-14 03:10:03 +00:00
oster 4a058e82c5 Correct and/or improve detection of bogus row/column values
passed in via ioctls.
1999-08-14 02:41:36 +00:00
oster 1aa6ce1041 Garbage collect rpcc(). 1999-08-13 03:27:46 +00:00
oster 620eda50c7 Don't allow reconstructs, copybacks, or forced failures of components if
using a RAID 0, since RAID 0 can't handle those sorts of things.
1999-08-10 22:46:59 +00:00
oster 49efd10006 Oops. Make minor change that I forgot when adding the parity check ioctl. 1999-08-10 21:41:37 +00:00
oster a3aefdaee3 Add support for easily checking the parity status from userland.
Also: spl protect rf_RewriteParity().
1999-08-10 18:18:30 +00:00
oster 5cef006d40 Need to splbio()/splx() protect some of the reconstruction stuff.
Without this, we have potentially bad interatctions with the pool
code.
1999-07-21 03:15:26 +00:00
oster 324c76b3d9 Once upon a time, long long ago, there was a "fix" added to the
RAIDframe driver to stop it from eating too much kernel memory when
writing data.  But that fix had a nasty side-affect of hurting write
performance (*much* more than I thought it would).  These changes nuke
that "fix", and instead put in a more reasonable mechanism for limiting
the number of simultaneous IO's which can be happening for each RAID device.
The result is a noticeable improvement in write throughput.  The End.
1999-07-08 00:45:23 +00:00
oster 86abd11d42 Remember to pass down the proc pointer when adding a hot spare.
(Thanks to Martin J. Laubach for helping track this one down.)
1999-06-13 20:36:17 +00:00
oster 4882ae464f Fix a couple of compiler warnings on the Alpha. Pointed out by Tim Rightnour. 1999-04-12 19:39:59 +00:00
oster 9f560505d4 Allow re-writing parity on a RAID 0 to trivially succeed, and to set the
clean bit.  This is somewhat bogus as RAID 0 does not have any parity,
but is a slightly cleaner than other solutions, and makes the handling
of clean bits for RAID 0 consistent with the handling of clean bits at
other RAID levels.
1999-04-07 14:17:10 +00:00
oster 14de6c2418 Cleanup shutdown code - garbage collect (now) unused shutdownhooks() stuff. 1999-03-27 01:26:37 +00:00