summaryrefslogtreecommitdiffstats
path: root/sys/dev/softraid.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Add a RAID1C (raid1 + crypto) softraid(8) discipline.stsp2021-02-081-6/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The RAID1C discipline encrypts data like the CRYPTO discipline, and accepts multiple chunks during creation and assembly like the RAID1 discipline. To deal with failing disks a RAID1C volume may be assembled with a smaller number of chunks than the volume was created with. The volume will then come up in degraded state. If the volume is now detached and assembled again with the correct number of chunks, any re-added chunks will require a rebuild. Consequently, assembling RAID1C volumes requires careful attention to the chunks passed via 'bioctl -l'. If a chunk is accidentally omitted from the command line during volume assembly, then this chunk will need to be rebuilt. At least one known-good chunk is required in order to assemble the volume. Like CRYPTO, RAID1C supports passphrase and key-disk authentication. Key-disk based volumes are assembled automatically if the key disk is present while the system is booting up. Unlike CRYPTO and RAID1, there is no boot support for RAID1C yet. RAID1C largely reuses existing code of RAID1 and CRYPTO disciplines. At present RAID1C's discipline-specific data structure is shared with that of the CRYPTO discipline to allow re-use of existing CRYPTO code. A custom RAID1C data structure would require CRYPTO code to access struct sr_crypto via a pointer instead of via a member field of struct sr_discipline. ok jsing@
* softraid(4): more tsleep(9) -> tsleep_nsec(9) conversionscheloha2020-12-161-3/+3
| | | | | | | | | These wait loops block for up to 1 tick per iteration. I think they will continue to work if we block for at least 1ms per iteration. My gut says that these could be rewritten not to spin and instead to await a wakeup(9) from the other thread, but I think that would involve making softraid(4) more MP-safe.
* Replace sr_copy_internal_data() with scsi_copy_internal_data().krw2020-10-151-20/+4
|
* Since dlg@'s 2009 scsi midlayer refactoring the 'struct scsi_generic *cmd'krw2020-09-221-17/+15
| | | | | | | | | | | | member of 'struct scsi_xfer' has always been pointed at the 'struct scsi_generic cmdstore' member of the same instance. So nuke 'cmdstore' and remove the '*' from cmd. Take the address of cmd as required by the various casts. No intentional functional change. luna88k test by aoyama@, sparc64 test by jmatthew@ Identification of 2009's last *cmd use and ok jmatthew@
* Replace '32' with SID_SCSI2_ALEN (a.k.a. 31) when building emulated INQUIRYkrw2020-09-051-2/+2
| | | | | responses. This is what the SCSI specifications say is the correct value and already used in several cases.
* Replace '.response_format = 2' with '.response_format = SID_SCSI2_RESPONSE'.krw2020-09-031-2/+2
|
* When building emulated INQUIRY results use the SCSI_REV_* #define's tokrw2020-09-021-2/+2
| | | | initialize the 'version' field. Not numbers.
* Rename [READ|WRITE]_BIG to [READ|WRITE]_10. Rename struct scsi_rw_big tokrw2020-09-011-4/+4
| | | | | | struct scsi_rw_10. ok gnezdo@ jmatthew@ (who also did sparc64 compile test)
* Move remaining scsi bus initialization info from "prototype scsi link"krw2020-07-201-2/+5
| | | | | | | fields to struct scsibus_attach_args. Nuke the struct scsi_link * (saa_sc_link) in scaibus_attach_args. Explicitly initialize each field in scsibus_attach_args variables.
* Move the adapter related items (luns, adapter, adapter_target,krw2020-07-191-7/+6
| | | | | | | adapter_buswidth, adapter_softc) from struct scsi_link to struct scsibus_attach_args. Additional compile tests by jmatthew@ (sparc64) and aoyam@ (luna88k).
* Access adapter softc via link->bus->sb_adapter_softc.krw2020-07-161-4/+4
| | | | | | | | In sparc64 autoconf access 'luns' via sb_luns and 'adapter_buswidth' via sb_adapter_buswidth. Removes last post-config uses of the copies of bus related information in scsi_link.
* Fix malloc(9) sizekn2020-07-131-2/+2
| | | | | | | | | Spotted while reading the code, we overallocate quite a bit: (gdb) p sizeof(struct sr_meta_crypto) - sizeof(struct sr_meta_boot) $1 = 2312 OK jsing
* Expunge some Captain Obvious comments, tweak whitespace a bit, move a debugkrw2020-07-111-3/+3
| | | | statement. All to make upcoming diff(s) smaller and easier to read.
* Nuke trailing whitespace.krw2020-06-271-2/+2
|
* No need to bzero()/memset() 'struct scsibus_attach_args' variableskrw2020-06-271-2/+1
| | | | immediately before initializing the only field in the struct.
* Use SDEV_NO_ADAPTER_TARGET instead of the value that is beingkrw2020-06-241-2/+2
| | | | | | | aassigned to adapter_buswidth to indicate the adapter is not a target on the bus. ok dlg@ as part of a larger diff.
* Provide clear errors when trying to install oversized boot loaderkn2020-06-081-3/+9
| | | | | | | | | | | | | | | | sparc64 installboot(8) on softraid(4) with too large files, e.g. unstripped builds, fails poorly with "installboot: softraid installboot failed". This is due to the BIOCINSTALLBOOT ioctl(2) returing the default EINVAL rather than using softraid's sr_error() interface properly; additionally, installboot does not check for such message from the bio(4) layer. Make the kernel generate "boot block too large" and "boot loader too large" messages for softraid devices and have installboot act upon them analogous to bioctl(8), by adapting its bio_status() into the new sr_status() helper. Input, reminder to look at bioctl, same kernel diff from, OK jsing
* Prevent uninitialized use of bbs and bls in the error pathjca2020-04-141-2/+2
| | | | | Harmless since free(9) first checks that the pointer is not NULL. ok krw@
* Remove redundant VOP_CLOSE() and vput(). The fail branch will closevisa2020-04-061-3/+1
| | | | | | the vnode because `open' is true. OK deraadt@, anton@
* Remove unused argument to sr_error.tobhe2020-03-101-2/+2
| | | | ok kn@ deraadt@
* Nuke *_minphys() functions that either simply apply MAXPHYS or dokrw2020-02-131-13/+2
| | | | | | | | nothing at all. MAXPHYS will be applied in minphys() and nothing at all, well, doesn't do anything. Also remove any '#define <blah> MAXPHYS' statements used solely to disguise MAXPHYS in said functions.
* Drivers that implement their own *minphys() don't need to call thekrw2020-01-251-2/+1
| | | | | | | system minphys(). scsi_minphys() will do that and cd/sd/st will call scsi_minphys(). ok jmatthew@ as part of larger diff
* softraid(4): tsleep(9) -> tsleep_nsec(9); ok kn@cheloha2019-08-081-10/+13
|
* Fix a free size panic when detaching a crypto softraid on i386.bluhm2019-07-041-5/+6
| | | | | | Store the size of struct sr_workunit depending on the softraid type in struct sr_discipline. testing and OK jan@
* Correct free size. Fixes a panic when detaching crypto volumes.tim2019-05-181-2/+3
| | | | OK jan@, "yes please" tedu@
* Fix free(9) sizes in softraid(4)jan2019-05-151-26/+28
| | | | OK tedu@
* Remove proc from the parameters of vn_lock(). The parameter isvisa2018-05-021-3/+2
| | | | | | unnecessary because curproc always does the locking. OK mpi@
* sr_quiesce() is a new approach for ensuring that softraid drainsderaadt2018-02-081-1/+19
| | | | | | | | output to the disks. This is part of a larger suspend/resume filesystem-safety diff, which has been worked on for a couple of months already. Tests by job, krw, beck, benno, and others. Sometimes even by snapshot users...
* Use duid_format() instead of rolling one locally.krw2018-02-071-13/+5
| | | | ok jsing@ tb@
* Two width specifiers changed from %02 to %0 in previous. Change them back.tb2017-12-211-2/+2
| | | | ok deraadt
* Do not use %hx for chars, ok kettenisderaadt2017-12-211-3/+3
|
* Add a sanity check on the number of chunks beingkrw2017-12-201-1/+8
| | | | | assembled into a volume, to enure the on-disk metadata and the in-memory metadata agree.
* Don't bother using DETACH_FORCE for the softraid luns at rebootderaadt2017-12-141-10/+11
| | | | | time; the aggressive mountpoint destruction seems to hit insane use-after-frees when we are already far on the way down.
* In the case that we want to force a new RAID assembly and the metadatapatrick2017-09-061-2/+2
| | | | | | | | | type on the chunks is not the same, we don't actually care because we are going to clear their metadata anyway, so don't error out. This allows assembling a new RAID based on a drive that is zeroed and one that used to be part of a softraid in its previous life. ok jsing@
* Report the rebuild state properly, so that in the case of a rebuildpatrick2017-08-301-1/+6
| | | | | | the sensor does not show the drive state as "unknown". ok phessler@
* tweak malloc(9) flags: since that M_NOWAIT might return NULL hence itgsoares2017-07-241-6/+6
| | | | | | doesnt make sense to use M_CANFAIL flag. ok dlg jsing
* Upon failure, only return zero from the softraid ioctl handler when therejsing2017-06-121-2/+5
| | | | | | | is at least one bio status message. It is a much nicer user experience when we properly report failures, however in the case that we fail to do this, getting an errno back from the ioctl is somewhat better than simply printing "unknown error" from bioctl(8).
* Provide sufficient info in error messages to identifykrw2017-06-061-5/+5
| | | | | | | | | | softraid volume and backing disk when i/o errors occur. Original issue reported by Paul de Weerd. Suggestions from jsing@. ok deraadt@ mikeb@
* Avoid some false positives with cppcheck. No binary change.bluhm2017-04-141-2/+3
| | | | OK jsg@
* If the sub-device of a softraid lacks a side-effect io function, returnderaadt2017-03-271-1/+3
| | | | | failure as early as possible. ok mlarkin claudio
* Restore behavior from before r1.376: only set bv_percent if a rebuild istb2017-03-191-2/+3
| | | | | | | in progress. This eliminates the spurious and harmless "0% done" message in the output of 'bioctl softraid0' reported by various on misc. ok jsing
* Plug potential leak of device list.krw2016-07-201-2/+6
| | | | | | Problem found by Michael McConville. Tested & ok stsp@
* Provide a function for calculting the rebuild percentage, rather thanjsing2016-05-311-25/+19
| | | | | | having five copies of the same code. ok krw@
* Panic when attempting to execute a scsi command with no disciplinekrw2016-04-291-6/+4
| | | | | | | | | defined. Carrying on is pointless. And will currently cause a NULL pointer deref anyway. NULL deref found by mmcc@ and his friend clang. ok deraadt@
* Display correct value in error message.krw2016-04-261-2/+2
|
* Do NOT attempt a rebuild using a hot spare with a sector sizekrw2016-04-261-2/+8
| | | | | | | | greater than the sector size of the softraid volume. i.e. 512-byte hot spares should work on 4096-byte volumes but 4096-byte hotspares will not work on 512-byte volumes. Pointed out, errors corrected and ok jsing@
* Restore intro comment to sr_hotspare_rebuild(), which was erroneouslykrw2016-04-261-1/+5
| | | | | | replaced by comment for first chunk of code. Pointed out by jsing@.
* Use consistent intro comment when searching for the first offlinekrw2016-04-191-5/+2
| | | | | chunk and perhaps save the next person reading the code some confusion.
* Use variable 'cid' in for(;;) rather than 'i' with an assignmentkrw2016-04-191-6/+4
| | | | | 'cid = i;' when break'ing. Makes code consistent with same search later. No functional change and shrinks later functional diff.
* Change a variable name (chunk_no -> cid) to make a couple of codekrw2016-04-191-5/+5
| | | | | chunks more obviously the same. Reduces size of upcoming diff. No functional change.