Commit Graph

520 Commits

Author SHA1 Message Date
alfred
34c1e918b6 Take a shot at making vinum devfs aware.
Adding make_dev() and destroy_dev() calls in (hopefully) the right
places.

This is done by calling make_dev() in each object constructor and
caching the dev_t's returned from make_dev() in each struct
'subdisk'(sd), 'plex' and 'volume' such that the 'object'_free()
functioncs can call destroy dev.

This change makes a subset of the old /dev/vinum appear under devfs.

Enough nodes appear such that I'm able to mount my striped volume.

There may be more work needed to get vinum configuration working
properly.
2001-02-20 11:37:04 +00:00
bmilekic
f364d4ac36 Change and clean the mutex lock interface.
mtx_enter(lock, type) becomes:

mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks)
mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized)

similarily, for releasing a lock, we now have:

mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN.
We change the caller interface for the two different types of locks
because the semantics are entirely different for each case, and this
makes it explicitly clear and, at the same time, it rids us of the
extra `type' argument.

The enter->lock and exit->unlock change has been made with the idea
that we're "locking data" and not "entering locked code" in mind.

Further, remove all additional "flags" previously passed to the
lock acquire/release routines with the exception of two:

MTX_QUIET and MTX_NOSWITCH

The functionality of these flags is preserved and they can be passed
to the lock/unlock routines by calling the corresponding wrappers:

mtx_{lock, unlock}_flags(lock, flag(s)) and
mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN
locks, respectively.

Re-inline some lock acq/rel code; in the sleep lock case, we only
inline the _obtain_lock()s in order to ensure that the inlined code
fits into a cache line. In the spin lock case, we inline recursion and
actually only perform a function call if we need to spin. This change
has been made with the idea that we generally tend to avoid spin locks
and that also the spin locks that we do have and are heavily used
(i.e. sched_lock) do recurse, and therefore in an effort to reduce
function call overhead for some architectures (such as alpha), we
inline recursion for this case.

Create a new malloc type for the witness code and retire from using
the M_DEV type. The new type is called M_WITNESS and is only declared
if WITNESS is enabled.

Begin cleaning up some machdep/mutex.h code - specifically updated the
"optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN
and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently
need those.

Finally, caught up to the interface changes in all sys code.

Contributors: jake, jhb, jasone (in no particular order)
2001-02-09 06:11:45 +00:00
grog
e6bd7f7c6d Allocate lock table and mutex not only for parity plexes, but also for
striped plexes.  This prevents various panics introduced in the last
rewrite of the locking code.

Suffered by:   "Niels Chr. Bank-Pedersen" <ncbp@bank-pedersen.dk>
2001-02-02 07:14:13 +00:00
jhb
9c54776639 - Proc locking around the vinumdaemon dinking with its flags.
- P_INMEM -> PS_INMEM.
2001-01-24 10:28:19 +00:00
jake
937122ae6d Make intr_nesting_level per-process, rather than per-cpu. Setup
interrupt threads to run with it always >= 1, so that malloc can
detect M_WAITOK from "interrupt" context.  This is also necessary
in order to context switch from sched_ithd() directly.

Reviewed By:	peter
2001-01-21 19:25:07 +00:00
grog
18831b1520 Correct check for partition c. Previously the check was for drive 2,
which did not exactly have the desired result.

Submitted by:	Akira Watanabe <akira@myaw.ei.meisei-u.ac.jp>
2001-01-20 03:46:19 +00:00
grog
41bf790205 struct rangelock: Remove the field 'plex' from the entry. Range locks
are accessed only via the plex, so there's never any confusion as to
the plex number.  This value was, as a result, unused.
2001-01-14 06:34:57 +00:00
grog
75e58e6a2a format_config: If a subdisk loses its drive (due to a bug which has
not yet been caught), don't save the config with a null drive
   	name (which causes the drive to be renamed "plex" on the next
   	start), put in the text "*invalid*" instead.

	This is damage control, not a fix.

Experienced by:	peter

Break some long format strings so that they fit in style(9)-sized
lines.

Remove some "outdentation".
2001-01-14 06:33:10 +00:00
grog
7dca633800 config_plex: Check that we have specified a plex organization.
Tripped over by:	"Jeroen C. van Gelderen" <jeroen@vangelderen.org>
2001-01-14 06:29:56 +00:00
grog
d9512fd7b2 Reinstate 1.19.
Prodded by: iedowse
2001-01-10 21:42:06 +00:00
grog
cb4e03f2d8 Part of rewrite of RAID-[45] locking code:
Rename INITIAL_LOCKS to PLEX_LOCKS, since it now stays a constant.

struct plex:
  Add a mutex lockmtx.
  Remove alloclocks.
2001-01-10 05:08:30 +00:00
grog
274d1cfaa1 vinumstart: Don't check for B_DONE on return from bre(), it doesn't
happen any more.

abortrequest: don't bufdone the user bp on error, let vinumstart() do
it.

Based on analysis by:	tegge
2001-01-10 05:07:52 +00:00
grog
c15f890250 bre5: don't bufdone the user bp on error, let vinumstart() do it.
Based on analysis by:	tegge
2001-01-10 05:07:14 +00:00
grog
59b7117aff Remove obsolete functions [un]lockplex and [un]lockvol.
Rewrite lockrange and unlockrange.  The lock table is now a fixed
size, so there is no possibility for race conditions when expanding.
The current size (256 locked ranges) should be large enough that it
makes no sense to expand it.  To do expansion right would require
quiescing the plex (requiring at least 256 I/O completions), and the
performance implications are horrendous.

Add a mutex per plex for accessing the lock table.

Based on analysis by:	tegge
2001-01-10 05:06:37 +00:00
grog
67641fa38c Get definition of Malloc right when not using VINUMDEBUG
Pointed out by:	tegge
2001-01-10 05:05:46 +00:00
grog
4bd6619275 open_drive: Refuse to open partition c of a disk device.
This should eliminate one case of foot shooting .

vinum_scandisk: If a drive in the partition table is downed, free it.
This duplicates code for the compatibility partition, which for some
reason was omitted here.
2001-01-10 05:02:44 +00:00
grog
16c617b818 config_plex: Initialize mutex for parity plexes.
remove_plex_entry: Destroy mutex for parity plexes.

Part of rewrite of RAID-[45] locking code.
2001-01-10 05:01:12 +00:00
jake
4f5d8ed825 Use PCPU_GET, PCPU_PTR and PCPU_SET to access all per-cpu variables
other then curproc.
2001-01-10 04:43:51 +00:00
des
44f312b9eb Re-commit revision 1.32, which grog incorrectly backed out in revision 1.33. 2000-12-20 11:17:09 +00:00
grog
31534a49be revive_block: Don't go beyond the end of the stripe when reviving
striped plexes.

Submitted by:   des

Don't lock buffers before calls to sdio, sdio does it by itself.

Submitted by:	tegge

parityops:	Use correct casts when returning error information.
2000-12-20 05:18:58 +00:00
grog
525ccd8648 build_rq_buffer: Note which buffer headers we lock.
sdio: Unlock the buffer if we fail.

Submitted by:	tegge
2000-12-20 05:18:09 +00:00
grog
8b040789d7 Rearrange #includes to make more sense. This is still not the reform
that bde is waiting to see, but at least it works.
2000-12-20 05:17:29 +00:00
grog
36a1771965 Rename detached plexes and subdisks correctly (off by one error)
Submitted by:	Terry Glanfield <Terry.Glanfield@program-products.co.uk>
2000-12-20 05:16:46 +00:00
grog
8b50fee554 open_drive: Add support for more than 32 devices of a particular kind.
Requested by:	Bernd Walter <ticso@cicely8.cicely.de>
		Cor Bosman <cor@xs4all.net>
		Kai Storbeck <kai@xs4all.net>
		Joe Greco <jgreco@ns.sol.net>

	     Add support for Compaq SMART-2 RAID (idad) as storage
	     device for Vinum subdisks.

Reported by:	Aaron Hill <hillaa@hotmail.com>
2000-12-20 05:15:50 +00:00
grog
b2197cbfe9 give_plex_to_volume: Recalculate volume size after attaching.
Cosmetics.
2000-12-20 05:13:26 +00:00
grog
ef43fb5323 Add flag XFR_BUFLOCKED to identify buffers which have been locked.
Part of fix to ensure that we unlock buffers we lock.

In principle submitted by: tegge
2000-12-20 05:10:08 +00:00
grog
a1edf78333 Don't include system-specific header files for userland program.
Discovered by default by: alfred
2000-11-28 06:38:53 +00:00
des
2c31bf9c12 Make sure we don't cross stripe boundaries when reviving striped plexes.
This makes crash recovery work for stripe sizes that are not multiples of
DEFAULT_REVIVE_BLOCKSIZE (currently 64 kB).
While we're here, fix a few cosmetic nits.

Reviewed by:	grog
Sponsored by:	Enitel ASA (http://www.enitel.no/)
2000-11-17 23:40:01 +00:00
phk
d9e24db8fa Get rid of the last traces of ACTUALLY_LKM_NOT_KERNEL 2000-10-23 08:35:41 +00:00
bde
187e734c1d Avoid impending world breakage.
1. Don't include <sys/conf.h> in userland.  It is not used, and including it
   without including its prerequisite <sys/time.h> should have broken the
   world.
2. Don't include <sys/mount.h>.  It is not used, except in -current it
   bogusly includes <sys/stat.h> which bogusly includes <sys/time.h> and
   thus accidentally provides the prerequisite in (1).
3. Cleaned up nearby include messes.

Not approved by despite 5 weeks notice: MAINTAINER
2000-10-13 13:43:37 +00:00
grog
5b09de9795 open_drive:
Add support for AMD RAID controllers as "disks".

Requested-by:  Marius Bendiksen <mbendiks@eunet.no>

  Remove potential panic when attempting to open non-existent drivers.

init_drive: Return error codes correctly.  Previously it would
            occasionally return 0.  The error was redetected
            elsewhere, but this was causing a number of confusing
            error messages.
2000-08-16 04:31:37 +00:00
grog
1012ded50e start_object: Set the revive length correctly. 2000-06-07 03:34:18 +00:00
grog
5d65db6c80 revive_block:
Fix several instances of breakage in RAID-5 revive code.

   Tidy up code.

parityops:
   Don't attempt to do anything if the plex is degraded or worse.

parityrebuild:
   Add comments.
   Perform transfers in correct length.
2000-06-07 03:33:09 +00:00
grog
243ad5208b parity ops: Correctly recognize the end of the plex. Previously we
were running off the end and generating worrying but harmless messages
about parity errors that wouldn't go away.
2000-06-05 03:01:07 +00:00
grog
9d6c03859b parityrebuild: write the parity block back to the correct subdisk.
HEADS UP: This fixes a serious data corruption bug when using the
userland command 'rebuildparity'.
2000-06-02 04:05:40 +00:00
grog
1c276d6af7 Remove an incorrect comment, adjust white space. 2000-06-02 04:05:05 +00:00
grog
4566b06d22 Add 'dumpconfig' keyword. 2000-06-02 04:04:31 +00:00
grog
017a1733ac Remove a redundant statement. 2000-06-02 04:03:57 +00:00
grog
b490d01092 open_drive: Recognize "wd" device type. This is going away, but it's
not gone yet.

format_config: print correct text when a volume has a preferred plex.
This is still broken, but not quite as badly.

Reported-by: Phil Regnauld <regnauld@ftf.net>

Change a rather silly comment.
2000-06-02 04:03:13 +00:00
grog
25e1326b4b give_sd_to_plex: Initialize sd->plexno correctly. Previously this was
only being done at plex creation time, and an attach would leave the
value uninitialized.
2000-06-02 04:02:15 +00:00
grog
9977806373 Don't forget 'stripe' and 'mirror' commands when we turn off
debugging.

Submitted-by: mdodd
2000-05-20 03:21:50 +00:00
grog
39725abf30 Allow revive block sizes up to MAXPHYS.
Change struct plex to reflect changes to parity maintenance functions.
2000-05-11 07:27:27 +00:00
grog
1c2d499c3e Rewrite parity maintenance functions.
revive_block: Correct bug introduced in revision 1.25 which caused
Add fields to vinum_ioctl_msgexcessive concurrent requests followed by
system death.
2000-05-11 07:26:33 +00:00
grog
54b45133e0 Cosmetics. 2000-05-11 07:25:36 +00:00
grog
b5fc3fc181 vinum_scandisk: Correct error recovery if a configuration is munged. 2000-05-11 07:24:41 +00:00
grog
efac8d59bd Correct a comment. 2000-05-11 07:23:50 +00:00
grog
9bda0c7cd1 Change parity maintenance ioctls.
Add fields to vinum_ioctl_msg.
2000-05-11 07:23:16 +00:00
grog
9be8013c4d Change linkage to parity maintenance operations. 2000-05-11 07:22:18 +00:00
phk
36c3965ff9 Separate the struct bio related stuff out of <sys/buf.h> into
<sys/bio.h>.

<sys/bio.h> is now a prerequisite for <sys/buf.h> but it shall
not be made a nested include according to bdes teachings on the
subject of nested includes.

Diskdrivers and similar stuff below specfs::strategy() should no
longer need to include <sys/buf.> unless they need caching of data.

Still a few bogus uses of struct buf to track down.

Repocopy by:    peter
2000-05-05 09:59:14 +00:00
grog
539756f482 Increase the initial size of a RAID-5 plex lock table to 256 entries,
which seems to correspond better with what a busy plex needs.  This
may also help us avoid race conditions when expanding the table which
may have been contributing to the random corruption, panics and hangs
we've been seeing in RAID-5 plexes, particularly with ata drives.

Eagerly-awaited-by: sos
2000-05-04 07:48:40 +00:00
grog
8ba6aa9a33 requeststatus: Correct check for striped plex.
Submitted-by:	Matthew Reimer <mreimer@vpop.net>
2000-05-04 07:46:45 +00:00
grog
bbbefd438c Don't hide bio structure behind macros like b_ioflags.
Get counting volume I/Os right.

launch_requests: Be macho, throw away the safety net and walk the
tightrope with no splbio().

Add some comments explaining the smoke and mirrors.

Remove some redundant braces.

sdio: Set the state of an accessed but down subdisk correctly.  This
appears to duplicate an earlier commit that I hadn't seen.
2000-05-04 07:44:23 +00:00
grog
701969bf4a expand_table: Avoid a race condition which may have been contributing
to the random corruption, panics and hangs we've been seeing in RAID-5
plexes, particularly with ata drives.

Eagerly-awaited-by: sos
2000-05-04 07:38:47 +00:00
grog
cf2c7a9d52 lockrange: Avoid a race condition which was causing random corruption,
panics and hangs in RAID-5 plexes, particularly with ata drives.

Original-code-by:   Bernd Walter <ticso@cicely.de>
Eagerly-awaited-by: sos
2000-05-04 07:37:11 +00:00
grog
2e5ef3db36 remove_drive: correctly obliterate the magic number.
Reported-by: 	phk
2000-05-04 07:35:03 +00:00
grog
d0290ff674 Don't hide bio structure behind macros like b_ioflags.
Get counting volume I/Os right.

Count buffer sizes correctly for architectures where ints are not 32 bits.

complete_rqe: Move decrementing active count until after call to
complete_raid5_write, thus possibly avoiding a race condition.

Suggested-by:	      dillon

Rename user bp to ubp to avoid confusion.

Tidy up comments.
2000-05-04 07:33:40 +00:00
grog
a18a701503 Only wake up one process when we're done configuring.
Suggested-by:	msmith
2000-05-04 07:29:55 +00:00
phk
1931990da0 s/biowait/bufwait/g
Prodded by: several.
2000-04-29 16:25:22 +00:00
grog
2f2ffe8fce initsd(): Complete the intention of revision 1.25 and write init data to disk.
Sleuthwork-by:	alfred
2000-04-22 09:05:16 +00:00
phk
75e82c815e Remove unneeded <sys/buf.h> includes.
Due to some interesting cpp tricks in lockmgr, the LINT kernel shrinks
by 924 bytes.
2000-04-18 15:15:39 +00:00
phk
3e65a21d76 Make vinum compile again using the "cast to buf" workaround.
Approved by:	grog
2000-04-16 07:18:08 +00:00
grog
31f0f935ef open_drive: Add kludges for vn and md.
Submitted-by:	dillon (vn)
Requested-by:	phk (md)
2000-04-06 07:25:35 +00:00
grog
844f06daa5 (finally!) add keywords raid4 and partition. 2000-04-06 07:13:44 +00:00
grog
a5759b7139 complete_rqe: Remove a race condition in RAID-4 and RAID-5 where a
request could be deallocated before the top half had finished
	issuing it.  The problem seems only to happen with IDE drives
	and vn devices, but theoretically it could happen with any
	drive.  This is the most important part of a possible series
	of fixes designed to remove race conditions without locking
	out interrupts for longer than absolutely necessary.

Reported-by:	       sos
Fix-supplied-by:       dillon
2000-04-06 03:03:31 +00:00
phk
8ee11d587f Move B_ERROR flag to b_ioflags and call it BIO_ERROR.
(Much of this done by script)

Move B_ORDERED flag to b_ioflags and call it BIO_ORDERED.

Move b_pblkno and b_iodone_chain to struct bio while we transition, they
will be obsoleted once bio structs chain/stack.

Add bio_queue field for struct bio aware disksort.

Address a lot of stylistic issues brought up by bde.
2000-04-02 15:24:56 +00:00
alfred
16bf0867b4 repair half-Danish b.b_iocmd damage where writes/reads weren't getting
set properly in the struct buf with vinum:

  Fix locations where B_READ was cleared in the old code but
    b.b_iocmd wasn't set to BIO_WRITE
  Fix propogation of b_iocmd
  Correct comments to reflect reality
  Don't compare b_flags with BIO_READ, it's in b_iocmd.

Submitted by: Bernd Walter <ticso@cicely.de>
2000-03-26 23:06:12 +00:00
alfred
48a45c9a17 rqe->b.b_flags |= B_READ; became
rqe->b.b_iocmd == BIO_READ instead of
rqe->b.b_iocmd = BIO_READ;
fix it.
2000-03-26 09:20:33 +00:00
phk
5df766a0f8 Rename the existing BUF_STRATEGY() to DEV_STRATEGY()
substitute BUF_WRITE(foo) for VOP_BWRITE(foo->b_vp, foo)

substitute BUF_STRATEGY(foo) for VOP_STRATEGY(foo->b_vp, foo)

This patch is machine generated except for the ccd.c and buf.h parts.
2000-03-20 11:29:10 +00:00
phk
a246e10f55 Remove B_READ, B_WRITE and B_FREEBUF and replace them with a new
field in struct buf: b_iocmd.  The b_iocmd is enforced to have
exactly one bit set.

B_WRITE was bogusly defined as zero giving rise to obvious coding
mistakes.

Also eliminate the redundant struct buf flag B_CALL, it can just
as efficiently be done by comparing b_iodone to NULL.

Should you get a panic or drop into the debugger, complaining about
"b_iocmd", don't continue.  It is likely to write on your disk
where it should have been reading.

This change is a step in the direction towards a stackable BIO capability.

A lot of this patch were machine generated (Thanks to style(9) compliance!)

Vinum users:  Greg has not had time to test this yet, be careful.
2000-03-20 10:44:49 +00:00
grog
2b89a04ac4 sdio: If sd I/O fails because of an I/O error, set the sd state
correctly.

Reported-by:	phk
Approved-by:	jkh
2000-03-12 05:05:41 +00:00
grog
cca4cf9728 Fix a problem with device number parsing, which caused da10 to map to
da1, and da11 to da2.

Reported by:  Dan Nelson <dnelson@emsphone.com>

Implicitly-approved-by:	 jkh
2000-03-02 07:46:10 +00:00
grog
a1be463ef1 Set default revive block size to 64 kB.
Implicitly-sanctioned-by:	jkh
2000-03-01 07:25:46 +00:00
grog
e01350b9be Tidy up splbio() protection.
Tidy up locking.  Previously we were taking two locks for a parity
block, and only releasing one of them.

Implicitly-sanctioned-by:	jkh
2000-03-01 07:25:07 +00:00
grog
91aeef949e vinumstrategy: Don't count the read and written bytes before they're
transferred, do it in complete_rqe instead.

launch_requests: Replace the inadvertently removed splbio() around the
                 main loop.  It may not be necessary, but the biggest
                 test of this stuff are IDE disks, which I'm not
                 using.

                 Remove throttling code, I'm pretty sure it's not
                 needed any more.

		 Don't set B_ORDERED, it's not necessary either.

Objected-to-by: alfred

build_rq_buffer: Don't lose the B_ORDERED bit, it still has some
		 residual meaning.  To do this right, Vinum needs to
		 look at the B_ORDERED bit and order the transfer
		 across all disks involved.  That's an exercise for
		 another day.

Objected-to-by: alfred

Implicitly-sanctioned-by:	jkh
2000-03-01 07:24:26 +00:00
grog
51bc6920fd Add keywords raid4 and partition.
Implicitly-sanctioned-by:	jkh
2000-03-01 07:23:40 +00:00
grog
dfd51d0b7f complete_rqe: Handle volume read stats here with other objects.
Previously vinumstrategy counted the bytes before they were hatched,
giving rise to strangenesses when a read failed.

Implicitly-sanctioned-by:	jkh
2000-03-01 07:23:13 +00:00
grog
64929c1169 Replace the preprocessor variable names BDEV_MAJOR and CDEV_MAJOR with
VINUM_BDEV_MAJOR and VINUM_CDEV_MAJOR respectively.

Set DRIVE_MAXACTIVE and VINUM_MAXACTIVE to 30000, effectively
disabling the request limitation code.  This code was added as an
attempt to escape from a bug which seems to have gone away, and it's
very likely I'll remove the code Real Soon Now, but I don't want to do
it just yet.

struct drive: Remove references to vnode pointers, including debug
output.  Vinum now talks directly to the device driver.  Instead, add
a dev_t.

enum plexorg: Add an instance for RAID-4.

Change checks for striped or RAID-5 plexes to a macro 'isstriped',
which now also includes RAID-4.

Change checks for RAID-5 plexes to a macro 'isparity', which now also
includes RAID-4.

Approved-by:  jkh
2000-02-29 06:17:26 +00:00
grog
f57eb39d92 plex_org: Add case for RAID-4.
Approved-by:  jkh
2000-02-29 06:16:44 +00:00
grog
4d73d96e4c set_drive_state: update subdisk states more correctly.
set_sd_state: update the state of a subdisk in a multi-plex volume
more correctly.

update_plex_state: Bring the plex up correctly when the last subdisk
comes up.

checksdstate: Update comments.

vpstate: Don't return an "up" state on a degraded, unattached plex.

start_object: Return a sensible error message when trying to revive a
subdisk whose drive is down.  Previously it returned EBUSY.

Approved-by:  jkh
2000-02-29 06:16:06 +00:00
grog
5b134f56e8 Fix horrible, embarrassing breakage which caused occasional panics and
data corruption.  It's a wonder it worked at all.

Led-on-the-right-path-by:  dillon

revive_block: Add treatment for RAID-4.

Add function parityrebuild, called by revive_block and parityops.

Approved-by:  jkh
2000-02-29 06:15:26 +00:00
grog
6334c5f0ca launch_requests: If too many requests are active, include PCATCH in
the tsleep call flags.

Submitted-by:  Bernd Walter <ticso@cicely.de>

Remove references to vnode pointers, including debug output.  Vinum
now talks directly to the device driver.

bre: Add case for RAID-4.

sdio: Don't try to write to a down drive.  Set the sd state instead.

Approved-by:  jkh
2000-02-29 06:14:44 +00:00
grog
7592f6b468 Add support for RAID-4. This is the only change which is needed for
RAID-4 support: the rest is just configuration management.

Requested-by:	peter
Approved-by:	jkh
2000-02-29 06:14:06 +00:00
grog
d2d0b1778d Malloc: Save the caller's file name in the correct entry. 2000-02-29 06:13:24 +00:00
grog
f4fc390e08 Add keywords 'partition' and 'raid4'.
Approved-by:  jkh
2000-02-29 06:13:02 +00:00
grog
5e18969e48 Modify comments to indicate that RAID-5 functions also apply to
RAID-4.

Approved-by:  jkh
2000-02-29 06:12:34 +00:00
grog
c48bc776a1 open_drive: open drives directly rather than going via namei and
vn_open.  This is necessary in order to be able to open drives before
the root file system is mounted.  This also involves restructuring the
drive struct, which no longer contains a vnode pointer.  Instead,
open_drive sets an open flag.  It's a horrible kludge, and I'll gladly
borrow a Danish axe and hack it in little pieces when devfs comes.

read_drive, write_drive, drive_io_done: Replace with driveio.  The
function names are now macros.

driveio: Fix horrible, embarrassing breakage which was the reason why
read_drive and write_drive existed in the first place.

Code-torn-to-shreds-by:  dillon

format_config: Don't save config of objects in referenced state.  They
get rebuilt automatically.

Change checks for striped or RAID-5 plexes to a macro 'isstriped',
which now also includes RAID-4.

Change checks for RAID-5 plexes to a macro 'isparity', which now also
includes RAID-4.

Replace the preprocessor variable names BDEV_MAJOR and CDEV_MAJOR with
VINUM_BDEV_MAJOR and VINUM_CDEV_MAJOR respectively.

vinum_scandisk: Don't free memory twice on error, once is enough.

Approved-by:  jkh
2000-02-29 06:11:13 +00:00
grog
fdf8df8e47 Remove references to vnode pointers, including debug output. Vinum
now talks directly to the device driver.

Approved-by:  jkh
2000-02-29 06:10:21 +00:00
grog
8769550ced Remove declarations of read_drive and write_drive and replace them
with macros.

Add declaration for parityrebuild, a new function.

Approved-by:  jkh
2000-02-29 06:09:41 +00:00
grog
5b355f828c Add support for RAID-4, even though it is inferior in almost every way
to RAID-5.  peter claims that it might be faster for sequential
reading, since the drive caches don't trip over the parity blocks.  I
have seen no evidence to support this, but it's a trivial change.

Requested-by:	peter

Change checks for striped or RAID-5 plexes to a macro 'isstriped',
which now also includes RAID-4.

Change checks for RAID-5 plexes to a macro 'isparity', which now also
includes RAID-4.

atoi(): Remove, nobody was talking to it.

give_sd_to_drive: If no space is available, make the subdisk down,
don't delete it.

Change the manner in which the subdisk count was maintained to avoid
cases where the count was not adjusted correctly.

config_drive: Check if we have subdisks referencing us, and add them
if so.  This fixes problems which arose when a drive is replaced in a
running system.

config_sd: Add support for a keyword 'partition', whose meaning will
	   be revealed in the fullness of time.

Cosmetic: Shorten some console messages.

Approved-by:  jkh
2000-02-29 06:08:33 +00:00
grog
11cc08e193 Change the startup sequence of the vinum volume from SI_SUB_DRIVERS
to SI_SUB_VINUM, thus making it possible for Vinum to access I/O
devices and start.

Replace the preprocessor variable names BDEV_MAJOR and CDEV_MAJOR with
VINUM_BDEV_MAJOR and VINUM_CDEV_MAJOR respectively.

Style fixes: replace NULL with 0 where appropriate.

Submitted-by: Charlie Root <root@sms-1.follo.net> (yup, that's all I
	      have to go on).

Approved-by:	jkh
2000-02-29 06:07:39 +00:00
grog
f7059144cd Cosmetic changes.
Approved-by:	jkh
2000-02-29 06:07:01 +00:00
phk
ae0c1ec8f7 Give vn_isdisk() a second argument where it can return a suitable errno.
Suggested by:	bde
2000-01-10 12:04:27 +00:00
alfred
c638b2b362 revision 1.40 backed out the removal of PCATCH in a tsleep allowing
an infinite loop if a signal is delivered here.
remove it again, this still ought to be revisited as the error should
probably be returned.
2000-01-10 10:24:47 +00:00
grog
d2a72ec901 Don't tsleep with PCATCH, it's a wonderful way to hang the system.
Reported-by:	Bernd Walter <ticso@cicely.de>
2000-01-05 22:59:36 +00:00
grog
54de424eb0 Add missing header file.
Not-reported-by:	peter
2000-01-05 22:58:39 +00:00
grog
e7fe2927c0 Explicitly type large scalar parameters to avoid compilation warnings
on alpha.

Submitted-by:	      Bernd Walter <ticso@cicely.de>

struct sd: Add a field for the pid of the reviver when the subdisk is
reviving.

Replace block device macros with generalized device macros.
2000-01-05 06:13:01 +00:00
grog
dcb56613d2 When attaching a plex to a volume with 'up' subdisks, make the plexes
subdisks 'stale', not 'reviving'.
2000-01-05 06:12:25 +00:00
grog
0f5463105e Correct printf format for pointers to avoid compilation warnings on
alpha.

Explicitly type large scalar parameters to avoid compilation warnings
on alpha.

Submitted-by:	      Bernd Walter <ticso@cicely.de>

Make better checks that the revive block size is valid, silently set
it to the defaults if not.

Replace block device macros with generalized device macros.
2000-01-05 06:11:46 +00:00
grog
852715ef7b Correct printf format for pointers to avoid compilation warnings on
alpha.

Modify the manner in which we lock RAID-5 plexes.  This appears to
solve some of the elusive panics we have seen with corrupted buffer
headers (specifically the zeroed-out b_iodone field).

Submitted-by:	      Bernd Walter <ticso@cicely.de>
2000-01-05 06:10:52 +00:00
grog
ac9c8c9469 Modify the manner in which we lock RAID-5 plexes. This appears to
solve some of the elusive panics we have seen with corrupted buffer
headers (specifically the zeroed-out b_iodone field).

Submitted-by:	      Bernd Walter <ticso@cicely.de>
2000-01-05 06:09:43 +00:00
grog
e9e5b6ca78 Change the name of the define 'SPACETAB' (originally 'isspace') to
'iswhite'.  The original change was required because of name
conflicts.

Add key pairs for the keywords 'mv' and 'move' (part of the move
command).

Add comments.
2000-01-05 06:08:55 +00:00
grog
89cebb7d49 Include basename() function even if the system isn't i386.
Correct printf format for pointers to avoid compilation warnings on
alpha.

Submitted-by:	      Bernd Walter <ticso@cicely.de>
2000-01-05 06:08:23 +00:00
grog
cb895d6122 Add the keywords 'mv' and 'move'. 2000-01-05 06:07:59 +00:00
grog
f11675cd12 Add function moveobject, which currently moves subdisks to different
drives.  This function just does the low-level configuration changes;
the resultant subdisk is stale if it previously had any contents,
otherwise it is empty (i.e. in need of initializing if it's RAID-5).
We still need to handle getting the contents moved over, but the
current version will suffice to migrate subdisks from a disk which has
failed.

Submitted-by:  Marius Bendiksen <marius@marius.scancall.no>
2000-01-05 06:07:26 +00:00
grog
a75e7bd294 Add VINUM_MOVE ioctl.
Fix transfer lengths for some ioctls.

Rearrange file: put structs first, then ioctl requests.
2000-01-05 06:06:01 +00:00
grog
28f59491e5 Explicitly type large scalar parameters to avoid compilation warnings
on alpha.

Submitted-by:	      Bernd Walter <ticso@cicely.de>

Remove #include of vm/vm_zone.h.

Submitted-by:	Someone, I'm sure, but I seem to have lost the
		attribution.  Sorry.

Get the check for disk devices correct, and return an appropriate
message if the check fails.
2000-01-05 06:05:33 +00:00
grog
0e4386ec6f Add declaration for give_sd_to_drive, needed for the 'move' command. 2000-01-05 06:04:17 +00:00
grog
aa30afaa10 Set P_SYSTEM in the daemon proc structure to alleviate delays on
shutdown.

Submitted-by:	Alfred Perlstein <bright@wintelcom.net>

Correct printf format for pointers to avoid compilation warnings on
alpha.

Submitted-by:	Bernd Walter <ticso@cicely.de>

Identify daemon as 'vinum', not 'vinumd', in messages.  This
corresponds to the name in ps.
2000-01-05 06:03:56 +00:00
grog
478d4d3a3c Explicitly type large scalar parameters to avoid compilation warnings
on alpha.

Submitted-by:	      Bernd Walter <ticso@cicely.de>

Get parameters right for some error messages returned via
throw_rude_remark().

Fix typo in comment.

Remove the 'static' attribute from give_sd_to_drive.  This is needed
for the implementation of moveobject() in vinumioctl.c.
2000-01-05 06:02:57 +00:00
grog
087f7ada9a Don't forget the 'stripe' and 'mirror' keywords when we turn debugging
off.

Reported-by:	ppyy <ppyy@bentium.com>
1999-12-30 07:13:22 +00:00
peter
15b9bcb121 Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL"
is an application space macro and the applications are supposed to be free
to use it as they please (but cannot).  This is consistant with the other
BSD's who made this change quite some time ago.  More commits to come.
1999-12-29 04:46:21 +00:00
eivind
87724eb673 Introduce NDFREE (and remove VOP_ABORTOP) 1999-12-15 23:02:35 +00:00
phk
76644d92d9 Look for disk devices rather than bdevs.
Approved by:	grog
1999-12-12 17:43:12 +00:00
phk
551bfa2f51 Remove BAD144 support, it has already been disabled for some time. 1999-12-08 09:33:00 +00:00
alfred
be3a1757c0 remove PCATCH from a tsleep that isn't checked for (avoid infinite loop).
this needs to be revisited.
1999-11-18 08:57:03 +00:00
grog
c30c23e035 Emergency fix to stop world breakage.
Broken-by:	archie
1999-11-03 20:04:00 +00:00
archie
52125b012d Change isspace() macro name to avoid conflict. 1999-11-02 22:42:56 +00:00
grog
5ccb30bf1f sdio_done:
Set the errors in the correct buffer header.

Inspection-provoked-by: Bernd Walter <ticso@cicely.de>
1999-10-17 23:56:47 +00:00
grog
a1894992f3 launch_requests:
Put splbio protection around the main launch loop.  We've seen cases where
  the bottom half was cutting off the branch on which we're sitting.

Experienced-by: Michael Reifenberger <root@nihil.plaut.de>
1999-10-17 23:55:10 +00:00
grog
6817b4ff2c Remove reference to obsolete initsd function.
This should have been committed yesterday.

Broke-world-for:	USW2 Root <root@usw2.freebsd.org>
1999-10-13 23:00:30 +00:00
grog
7e03845566 Change default revive block size to 60 kB (was 64 kB), and set a
maximum of 64 kB.

vinum_conf, struct drive: add fields for the current number of active
requests and the maximum ever active.

struct sd: Add fields for initialize progress.

struct mc: set the size of saved file names to MCFILENAMELEN instead
of the previous explicit constant.
1999-10-13 03:21:54 +00:00
grog
27e8167b0f Add glue for passing revive block size, and also for initializing a
subdisk.
1999-10-13 03:21:04 +00:00
grog
14c5b40d4b revive_block: Add a check for a too high revive block size. This is
possible now that vinum(8) can specify this size.

Add function initsd, which initializes a subdisk and optionally checks
that it really happened.
1999-10-13 03:20:11 +00:00
grog
1ded084e46 launch_requests:
limit the number of outstanding requests on a specific drive and
  overall.

  Change the way we set the active request count.  This enables us to
  start the requests without being in splbio for the duration, which
  could be very long for IDE drives in PIO mode.
1999-10-13 03:19:31 +00:00
grog
1f8a712f29 MMalloc: don't supply M_WAITOK when mallocing from an interrupt
context.  Be prepared to fail instead.

MMalloc, FFree: ensure that saved file names are properly terminated.
Use MCFILENAMELEN instead of the previous explicit constant.
1999-10-13 03:18:53 +00:00
grog
38685c9f83 struct vinum_ioctl_msg: Add fields verify (for initsd) and blocksize
(for revive and init).
1999-10-13 03:18:29 +00:00
grog
e312ef0ee4 Fix another instance of vinum_scandisk giving a request to the daemon
and then doing it itself, resulting in a panic downed drives.

Sleuth-work-by:	  Christopher Masto <chris@netmonger.net>

Remove dummy function initsd, which is now (implemented) in
vinumrevive.c

vinum_scandisk: Check that a drive is up before reading from it.  This
is probably excessive paranoia.
1999-10-13 03:17:59 +00:00
grog
7e55881dd6 Limit the number of outstanding requests on a specific drive and
overall.
1999-10-13 03:17:21 +00:00
grog
d00c77c723 Modify definition of Malloc: only M_WAITOK if we're not in an
interrupt context.
1999-10-13 03:16:56 +00:00
grog
886293e5aa Change the declaration of initsd. 1999-10-13 03:16:35 +00:00
grog
022ac88e0f Add some private storage so that we can queue requests in an interrupt
environment even if malloc fails.
1999-10-13 03:16:05 +00:00
n_hibma
279ad30025 Removal of sys/device.h
- Move intrhook stuff into kernel.h
- Remove all occurrences of #device <device.h>
- Add kernel.h were necessary (nowhere)
- delete device.h

This file contained the structures for cfdata (old style config) and is no
longer used. It was included by most drivers.

It confuses the remote debugger as the definition of 'struct device' in
device.h is found before the one in bus_private.h.
1999-10-05 21:19:41 +00:00
grog
0b4dce3508 struct plex: Add variables checkblock and rebuildblock to keep track
of parity check and rebuild operations.  This enables us
             to stop the operation and restart at a later time.

enum parityop: Trivial enum to decide what parityops() is going to do.
1999-09-28 22:58:07 +00:00
grog
ceed056964 revive_block: set b_resid correctly.
parityops: New function to check and rebuild RAID-5 parity blocks.
Not yet usable.
1999-09-28 22:57:29 +00:00
grog
6f15a47d21 logrq: add sdiodone case.
launch_requests: Remove debug code

sdio: Reformat log call.
1999-09-28 22:56:54 +00:00
grog
e26d973c1a Don't count iterations while waiting for a lock to become free. 1999-09-28 22:56:04 +00:00
grog
5a83a31cac Add ioctls VINUM_CHECKPARITY and VINUM_RESETPARITY, still to be fully
implemented.
1999-09-28 22:55:37 +00:00
grog
870bf32856 Reduce MAX_IOCTL_REPLY to 1024; the previous value was more than ioctl
could stand.

Define the correct return lengths for a number of ioctls.

Add ioctls VINUM_CHECKPARITY and VINUM_RESETPARITY, still to be fully
implemented.
1999-09-28 22:54:58 +00:00
grog
6f7810dec0 open_drive: Don't call set_drive_state to take a drive down, do it
ourselves.  This breaks a vicious circle which caused
            vinum to dereference a null vp if device nodes were
            missing.

Reported-by:	Brad Chisholm <sasblc@unx.sas.com>
		Alec Wolman <wolman@cs.washington.edu>

check_drive: Don't take a drive down if it's only referenced.

read_drive: Remove unused variable.
1999-09-28 22:46:39 +00:00
grog
0baa5f682a sdio_done: Log events if DEBUG_LASTREQS set. 1999-09-28 22:45:21 +00:00
grog
98afc1e9a0 Change remove_drive_entry
Add parityops
1999-09-28 22:43:59 +00:00
grog
555e3536e5 Remove some superfluous comments.
get_empty_volume: initialize plexes to -1 (not allocated)

remove_drive_entry:
  Remove recurse parameter (there's nothing below a drive in the hierarchy).
  Use remove_sd_entry to remove sds, don't do it ourselves.
  Log errors, don't throw rude remarks.

remove_plex_entry:
  Don't use plex->subdisks as a loop limit, it gets changed in the
     loop.  This caused some removals to only remove half the subdisks.
  Change logging of some "impossible" situations.

remove_volume_entry:
  Use remove_plex_entry to remove plexes, don't do it ourselves.

update_sd_config:
  Use set_sd_state to do the work.
1999-09-28 22:43:07 +00:00
grog
4ce980b705 Minor formatting changes (7th attempt) 1999-09-28 22:42:06 +00:00
grog
1df3ed8d59 Add loginfo type for sdiodone. 1999-09-28 22:27:10 +00:00
phk
e9e0512210 Remove five now unused fields from struct cdevsw. They should never
have been there in the first place.  A GENERIC kernel shrinks almost 1k.

Add a slightly different safetybelt under nostop for tty drivers.

Add some missing FreeBSD tags
1999-09-25 18:24:47 +00:00
julian
5c78e7345a Changes to centralise the default blocksize behaviour.
More likely to follow.

Submitted by: phk@freebsd.org
1999-09-09 19:08:44 +00:00
grog
82b81eaa6f struct rqgroup: put 0-length array at the end. Make mental note not
to write such crap again.

Spotted-by:	Parag Patel <parag@cgt.com>
1999-09-05 06:32:20 +00:00
julian
fd9cb11e53 Revert a bunch of contraversial changes by PHK. After
a quick think and discussion among various people some form of some of
these changes will probably be recommitted.

The reversion requested was requested by dg while discussions proceed.
PHK has indicated that he can live with this, and it has been agreed
that some form of some of these changes may return shortly after further
discussion.
1999-09-03 05:16:59 +00:00
julian
60f0adf39e remove some out-of-scope DEVFS references..
(don't worry greg.. cosmetic only)
1999-09-03 05:08:05 +00:00
grog
087bc8c4fb Reverse MFC of revision 1.5.2.7:
Remove a rather embarrassing race condition.

Egged-on-by:	alfred
1999-09-03 01:37:26 +00:00
phk
216936ca6d Make bdev userland access work like cdev userland access unless
the highly non-recommended option ALLOW_BDEV_ACCESS is used.

(bdev access is evil because you don't get write errors reported.)

Kill si_bsize_best before it kills Matt :-)

Use the specfs routines rather having cloned copies in devfs.
1999-08-30 07:56:23 +00:00
grog
1bd06cee6e Initialize the si_bsize fields of the new dev structure. This fixes
some swapper problems analogous to those experienced with ccd.

This fix is a kludge: since we currently don't track the "sector size"
in a volume label, we guess a worst case (4 kB, as used by vnode
devices).  If the concept of sector size is here to stay, I'll make
some changes to track the "sector size" of a volume.  This will
probably be the maximum of the sector sizes of all component drives,
but things could get ugly if we start allowing non-standard sector
sizes such as 524 bytes.

Unkludged-version-submitted-by:	phk
1999-08-29 01:41:53 +00:00
peter
3b842d34e8 $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
grog
6cb95ba779 read_drive: Remove references to vp->v_lastr, which is going away.
Reviewed-by:	dillon
1999-08-26 03:27:21 +00:00
grog
f94d5d264d complete_rqe: explicitly reinitialize b.b_iodone. This shouldn't have
changed, but we've seen some weird cases of b_iodone
	      being NULL, and they don't make any sense.

Suffered-by:  Bernd Walter <ticso@cicely.de>
1999-08-26 03:26:39 +00:00
grog
1c73eada88 config_plex: don't allocate a rangelock struct.
lockrange: correctly expand rangelock struct, including expanding a
	   null struct.  Previously lockrange would attempt to lock a
	   NULL pointer under these circumstances.

Reported-by:	Ian Freislich <iang@uunet.co.za>
1999-08-26 03:25:38 +00:00
grog
685c3b6c7f set_sd_state: Correct the conditions for bringing up empty or
initialized subdisks.

Tidy up some comments.

Eliminate sddownstate(); it wasn't being used any more.  Return
REQUEST_DOWN instead.

Add setstate_by_force() to implement the VINUM_SETSTATE_FORCE ioctl
for diddling individual object states.  This is a repair tool which
can also be used for panicing the system.  Use with utmost care if at
all.
1999-08-24 02:29:41 +00:00
grog
ce932f0fb9 Lock stripes of striped and RAID-5 plexes before writing them. This
avoids a race condition where multiple RAID-5 subdisks are being
revived at the same time.  The locks should also prevent conflicts
with user requests on concatenated and striped plexes, but this needs
more work.

Tidy up some comments.
1999-08-24 02:28:37 +00:00
grog
5ced956eda Add keywords setstate, checkparity, rebuildparity. 1999-08-24 02:27:45 +00:00
grog
65014fdc63 Add VINUM_SETSTATE_FORCE ioctl for diddling individual object states.
This is a repair tool which can also be used for panicing the system.
Use with utmost care if at all.
1999-08-24 02:26:15 +00:00
grog
b4cf138bbb format_config: print preferred plex correctly. 1999-08-24 02:24:47 +00:00
grog
a7b84f6d05 Change parameters of unlockrange to allow calling from revive_block,
which doesn't use request groups.
1999-08-24 02:23:21 +00:00
grog
9e831b88aa Add declaration for vinum_setstate_by_force. 1999-08-24 02:21:46 +00:00
grog
f177f6fd7f give_sd_to_drive: If we don't have space, deallocate the subdisk.
Previously we could end up with a valid subdisk
                  entry pointing to offset -1 on the drive.
1999-08-24 02:20:30 +00:00
grog
0d86d31f5d vinumclose: close raw plexes and subdisks. 1999-08-24 02:18:55 +00:00
grog
ac2c6244a0 Add support for logging subdisk I/O.
Change parameters of unlockrange to allow calling from revive_block,
which doesn't use request groups.
1999-08-24 02:17:42 +00:00
grog
d398591cdd free_drive: mark drive down. This may fix a panic in the 'start' command.
Reported-by:	peter
1999-08-16 05:09:39 +00:00
grog
92640f8ca5 Clean up some comments.
format_config: code preening.

vinum_scandisk: If we find a partition in the first pass over a drive,
note the fact so we don't grab the compatibility partition as well.

Submitted-by:  peter
1999-08-16 05:08:46 +00:00
grog
f012261d29 Add note that a change needs backing out. 1999-08-15 02:31:19 +00:00
grog
50b4840bce Ensure that we can't create two different drives on the same
partition.

Reported-by:	Remy Nonnenmacher <remy@synx.com>
1999-08-15 02:30:34 +00:00
grog
1f6c52a059 Add 'initialized' state for subdisks. After initializing, the subdisk
goes into initialized state, not 'up'.  This makes it easier to ensure
consistency in multi-plex volumes.

update_plex_state: redo transitions from empty and initialized
subdisks to up or reviving, depending on the number of plexes.

Reported-by:	Bernd Walter <ticso@cicely.de>
		Remy Nonnenmacher <remy@synx.com>
1999-08-15 02:29:14 +00:00
phk
5f45261e99 Spring cleaning around strategy and disklabels/slices:
Introduce BUF_STRATEGY(struct buf *, int flag) macro, and use it throughout.
please see comment in sys/conf.h about the flag argument.

Remove strategy argument from all the diskslice/label/bad144
implementations, it should be found from the dev_t.

Remove bogus and unused strategy1 routines.

Remove open/close arguments from dssize().  Pick them up from dev_t.

Remove unused and unfinished setgeom support from diskslice/label/bad144 code.
1999-08-14 11:40:51 +00:00
grog
01c244adfd Tidy up comments.
Add definitions for VINUM_BLOCK_PLEX and VINUM_CHAR_PLEX.

struct plex: add lock-related variables.

struct rangelock: add variables.
1999-08-14 06:31:37 +00:00
grog
a9d129e2f3 Clean up comments.
Don't return "can't do it" when the user requests a state change to
the current state.  This previously caused silly messages like "Can't
start <foo>: invalid argument", when in fact <foo> was already
started.

set_plex_state: don't set state for non-existent plexes.

update_plex_status: as long as we have initializing subdisks, we're
		    initializing.
1999-08-14 06:30:56 +00:00
grog
942707108f Clean up some comments.
Move the declaration of freerq() to request.h.

logrq: add support for lock events.

vinumstart: solve a problem where removing a plex from an active
	    volume could cause attempts to access non-existent plexes.

launch_requests: don't set a request group active until we're sure we
		 can launch it.  This caused some hangs under unusual
		 circumstances.

bre: don't set XFR_BAD_SUBDISK if we're not going to use it.

build_read_request: correct recovery, which caused some hangs under
		    (other) unusual circumstances.

build_rq_buffer: don't set bp->b_dev if we don't have a dev.

sdio: clean up, remove obsolete code.

deallocrqg: unlock any locks the rqg may have.
1999-08-14 06:30:15 +00:00
grog
f829f9d922 Tidy up some comments.
bre5:
  Shorten some lines.

  Desired-by:  bde

  If we're reading from a short plex, return EOF indication.

  Always lock the stripe before starting a transfer.  Hopefully the
  current version will solve some data integrity problems that have
  been reported with degraded RAID-5 plexes.

  Reported-by:	Bernd Walter <ticso@cicely.de>
		Remy Nonnenmacher <remy@synx.com>
1999-08-14 06:29:25 +00:00
grog
3ac70417ed Add keypairs replace and readpol. These got forgotten in a previous
commit, but since they don't work yet, nobody noticed.
1999-08-14 06:28:48 +00:00
grog
789bc6c7e5 rewrite lockrange and unlockrange. Hopefully the current version will
solve some data integrity problems that have been reported with
degraded RAID-5 plexes.

Reported-by:	Bernd Walter <ticso@cicely.de>
		Remy Nonnenmacher <remy@synx.com>
1999-08-14 06:28:21 +00:00
grog
a9a4ba690d Add hotspare keyword. 1999-08-14 06:27:52 +00:00
grog
f32b2ef48b vinumioctl: add ioctls for raw subdisks and plexes. Remove code for
drives (we refuse to touch drives, that's the disk driver's business).
1999-08-14 06:27:25 +00:00
grog
f8c6eb66f7 Remove some XXX comments (they're not really gone, just invisible).
Tidy other comments.

open_drive: don't call set_drive_state if we decide to take it down.
This could help avoid some race conditions with the daemon.

init_drive: don't set the drive down, we'll let close_locked_drive do
that.

close_locked_drive: set drive state to down without calling
set_drive_state.  This could help avoid some race conditions with the
daemon.

driveio: remove the function, it wasn't being used.

get_volume_label: remove volume dependencies so that we can return a
label for plexes and subdisks as well.  What a kludge.
1999-08-14 06:26:32 +00:00
grog
9853a23b9f Remove some XXX comments (they're not really gone, just invisible).
Remove declarations for freerq and free_rqg.

Remove DEBUG_RESID code.

freerq: check whether the request is holding a lock, free if so.

free_rqg: remove.  It wasn't being used any more.

Change the Debugger calls to panics.
1999-08-14 06:25:52 +00:00
grog
6c79f3377a Change definitions for get_volume_label, lockrange.
Move definition for unlockrange to request.h (it now contains
request-related parameters).

Add sddownstate.
1999-08-14 06:25:14 +00:00
grog
1910226dcc Add code which someday will help support hot spares.
checkdiskconfig(): remove.  It didn't make any sense to complain about
kernel keywords in user config files; it just made it more difficult
to convert.  Now we ignore kernel keywords if we're not in kernel
mode.

get_empty_sd: initialize sectors.

free_drive: don't close if we don't have a vp.  Maybe this will help
fix the problem that peter had, but I wouldn't count on it.

config_plex: If the plex is RAID-5, give it a rangelock structure.

start_config: Reset current drive, plex and volume so that a new
'create' command doesn't get long-dead defaults.
1999-08-14 06:24:34 +00:00
grog
5252ae9767 vinumopen: add code for opening raw plexes. Volume-related plex
devices will probably die a death soon (yes, DES, that's correct
usage).
1999-08-14 06:22:15 +00:00
grog
0b7aec11d7 Clarify some comments.
struct rqelement, enum rqinfo_type, struct rqinfo, union rqinfou: add
lock requests.

Add declarations for freerq and unlockrange.  Since they include
request structures, they can't go in vinumext.h
1999-08-14 06:21:45 +00:00
phk
7b7ae40370 The bdevsw() and cdevsw() are now identical, so kill the former. 1999-08-13 10:29:38 +00:00
phk
e938d317d5 Decommision miscfs/specfs/specdev.h. Most of it goes into <sys/conf.h>,
a few lines into <sys/vnode.h>.

Add a few fields to struct specinfo, paving the way for the fun part.
1999-08-08 18:43:05 +00:00
bde
42539e65d1 Fixed all printf format errors reported by gcc -Wformat on i386's:
- %q -> %ll.

Fixed nearby errors not reported by gcc -Wformat on i386's:
- don't assume that the promotion of [u_]int64_t is [u_]quad_t.
- don't use signed formats for unsigned args.
1999-08-08 14:11:03 +00:00
grog
5f3f238b21 Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>
1999-08-07 08:22:49 +00:00
grog
ddaeabd537 Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>

Define VINUM_BLOCK_SD and VINUM_CHAR_SD macros to create raw subdisk
device numbers.

Add VF_HOTSPARE flag.
1999-08-07 08:15:25 +00:00
grog
d1d36133a9 Update a comment. 1999-08-07 08:14:44 +00:00
grog
5426fc199c Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>

update_plex_state:
  If any subdisk in the plex is initializing, set the plex to
  initializing state.  This gets rid of the ugly corrupt/degraded/up
  transitions which previously occurred.

  Desired-by: Steve Taylor <staylor@cybernet.com>

sddownstate:
  Add new function, used by checksdstate.

checksdstate:
  Let sddownstate decide what status to return.
1999-08-07 08:14:01 +00:00
grog
2e0c87a98a Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>

logrq: save device major and minor numbers to compensate for lost
  dev_t.

launch_requests: Don't issue requests which are marked
  XFR_BAD_SUBDISK.  This may make things easier in bre().

bre:
  Rearrange.
  - Change some comments
  - Recognize holes in plex structure.  Formerly this could lead to
    incorrect write to the plex.  Return REQUEST_DEGRADED on a read
    request, but carry on to the bitter end on a write request, and
    mark the requests for the inaccessible subdisks with
    XFR_BAD_SUBDISK.
  - return REQUEST_EOF if the requested transfer goes beyond the end
    of the plex.  This is not an error, since other plexes may go
    further into the volume address space.

build_read_request:
  Handle REQUEST_DEGRADED returned from bre().

sdio:
  Lock buffer before issuing the requests.
1999-08-07 08:13:23 +00:00
grog
1068a4df87 Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>
1999-08-07 08:11:22 +00:00
grog
8b624b0301 Import RAID-5 code.
Add Cybernet copyright.

OK'd-by:     Chuck Jacobus <chuck@cybernet.com>

detchobject:  Don't update the object configuration.

replaceobject: Add preliminary code.  This is not yet complete.

vinumw.h vinumparser.c:

Add keyword 'hotspare'.
1999-08-07 08:09:36 +00:00
grog
70d6f70718 Add definition of new ioctl (READPOL) for setting the read policy of a
plex.  The code is not yet complete.
1999-08-07 08:08:18 +00:00
grog
2af0d14102 Remove code to accept partitions of type 'unused'. From now on, Vinum
will only accept partitions of type 'vinum'.

format_config: Use the new %q format option in kvprintf, thus getting
  rid of some of the filthiest code I've written in a long time.  Also
  remove the lltoa() function.

With-great-thanks-to:	peter

format_config: Accept the fact that a subdisk might not be attached to
  a plex, and save the config correctly.

vinum_scandisk: Scan all slices on a drive with a Microsoft partition
  table.  Only look at the compatibility slice if nothing was found in
  the Microsoft slices.

  This change removes a frequently employed method of shooting
  yourself in the foot: people would decide that the Vinum drives
  belonged on their own slice, and they wouldn't be able to start the
  subsystem after a reboot.  Documentation updates to follow.
1999-08-07 08:07:05 +00:00
grog
7e98d24c95 Close a memory leak. 1999-08-07 08:06:05 +00:00
grog
0b90cf6a6e vinumopen: add code to open raw subdisks. This is now used to
initialize subdisks.  Probably the plex-related subdisk type will die
a death.

vinumconfig.c:

Accept (and ignore) kernel state information in userland config
files.  This saves a lot of error recovery and also makes it possible
to use the output of printconfig to create new configuration.

Remove checkdiskconfig().  It wasn't needed any more.

Start adding support for hot spare drives.  You can't put anything on
them (yet).

Change message formats from %lld to %qd.

get_empty_sd: Initialize size to -1.  Previously this was done in
config_subdisk, which is the wrong place.

start_config: set current drive, plex and volume to -1, thus stopping
  update configurations from taking their defaults from old configs.
1999-08-07 08:05:46 +00:00