summaryrefslogtreecommitdiff
path: root/sys/dev/softraid.c
AgeCommit message (Collapse)Author
2014-07-12add a size argument to free. will be used soon, but for now default to 0.Ted Unangst
after discussions with beck deraadt kettenis.
2014-07-12essentially mechanical conversion of softraid rebuild fromBret Lambert
workq to taskq ok jsing@
2014-07-10Stop using a shutdown hook for softraid(4) and explicitly shutdownMartin Pieuchot
the disciplines right after vfs_shutdown(). This change is required in order to be able to set `cold' to 1 before traversing the device (mainbus) tree for DVACT_POWERDOWN when halting a machine. Yes, this is ugly because sr_shutdown() needs to sleep. But at least it is obvious and hopefully somebody will be ofended and fix it. In order to properly flush the cache of the disks under softraid0, sr_shutdown() now propagates DVACT_POWERDOWN for this particular subtree of devices which are not under mainbus. As a side effect sd(4) shutdown hook should no longer be necessary. Tested by stsp@ and Jean-Philippe Ouellet. ok deraadt@, stsp@, jsing@
2014-01-22Add some debug messages to the rebuild process and fix a bogus comment.Joel Sing
2014-01-22Add a debug flag for rebuild.Joel Sing
2014-01-22Make rebuild a discipline specific function pointer. For now, this defaultsJoel Sing
to the existing rebuild code. ok krw@
2014-01-22The sr_rebuild function does not actually do the rebuild, it only startsJoel Sing
the rebuild thread. Rename it to sr_rebuild_start to make this clearer. ok krw@
2014-01-22Move sr_dump from the RAID5 code into shared code. Rename it toJoel Sing
sr_dump_block and place it under the debug define in the process.
2014-01-22Switch metadata saves from the system workq to the system taskq.Joel Sing
ok dlg@
2014-01-21Actually use the correct TAILQ field.Joel Sing
2014-01-21Allow for variable sized work units.Joel Sing
ok krw@
2014-01-21Use a TAILQ for tracking work units, rather than an array. This will allowJoel Sing
for variable size work units. While here, remove some pointless checks. ok krw@
2014-01-21Stop bzeroing the work unit when it is initialised. Rather, only initialiseJoel Sing
the specific fields that are either not persistent for the life of the workunit and/or not reinitialised in sr_wu_release_ccbs. This is also necessary for upcoming changes. ok krw@
2014-01-20Convert the softraid work unit workqs to taskqs.Joel Sing
ok dlg@
2014-01-20Replace dedicated swu_fake variable with a work unit flag.Joel Sing
ok krw@
2014-01-19Assert that a workunit has ccbs if it is being scheduled. Otherwise weJoel Sing
deadlock since nothing will ever come back to tell us that the workunit is completed. ok krw@
2014-01-18Move the block get/put routines into the common code, instead of havingJoel Sing
RAID 6 borrow them from RAID 5.
2014-01-18Rename softraid RAIDP to softraid RAID5.Joel Sing
Discussed with krw@
2014-01-18Remove the RAID 4 discipline from softraid. Anyone sensible would use RAIDJoel Sing
5 instead of RAID 4, assuming both were functional. Discussed with krw@
2014-01-05On some architectures you can get away with using an uninitialised mutex;Joel Sing
this is not the case on hppa (practically the only architecture where unlocked has a non-zero value). This one has been hiding since r1.223... Found the hard way by juanfra@
2013-11-19Print daddr_t's with %lld, size_t's with %zu, int's with %d andKenneth R Westerback
u_int32_t's with %u. Translate DL_GETPSIZE() results to 512-byte-block values with DL_SECTOBLK(). ok jsing@
2013-11-04substantial namespace cleanup. Might go a little bit too far, but weTheo de Raadt
can expose some of the kernel structures with split .h files if need be. Discussed with various, including jsing.
2013-11-01Sprinkle (long long) casts where %lld is being used to print daddr_tKenneth R Westerback
variables. Some random whitespace/knf repairs encountered on the way. ok miod@ on inspection, feedback & more suggestions from millert@
2013-07-19Don't use uninitialized variable when a simple 0 will do.Kenneth R Westerback
Found by Maxime Villard. ok jsing@
2013-07-01When an I/O error occurs on a softraid chunk, only take it offline if theJoel Sing
discipline supports redundancy. In the non-redundant case, there is little to gain my failing the chunk, in fact it just makes any form of data recovery significantly harder. ok krw@ todd@
2013-06-11final removal of daddr64_t. daddr_t has been 64 bit for a long enoughTheo de Raadt
test period; i think 3 years ago the last bugs fell out. ok otto beck others
2013-05-21Ensure that sc_lock is held when calling sr_meta_native_bootprobe() - theJoel Sing
softraid status functions will complain otherwise. Found the hard way by ajacoutot@
2013-05-21sr_raid_startwu() is no longer called from interrupt context, hence doesJoel Sing
not need to invoke a workq-based callback.
2013-05-21Provide a function that handles the scheduling of work units. ThisJoel Sing
simplifies the discipline code, avoids code duplication and moves the scheduling logic into a single location. ok krw@
2013-05-21Make the sr_raid_startwu() function handle deferred work units, instead ofJoel Sing
the caller having to handle the state changes.
2013-05-21Fix missing work unit state initialisations.Joel Sing
2013-05-21Use a state to indicate that a work unit should only be constructed and notJoel Sing
scheduled, rather than trying to imply this from the rebuild flag.
2013-04-26Add a SR_WUF_DISCIPLINE flag that identifies work units that have resultedJoel Sing
from discipline specific I/O. Such work units are not associated with a SCSI xfer and are returned via sr_wu_put() on completion.
2013-04-23Rename ccb_flag to ccb_flags.Joel Sing
2013-04-21Convert RAID1 to the new work unit completion functions and genericJoel Sing
interrupt handler. Disciplines such as RAID1/4/5/6 need a way to intercept I/O when the work unit is complete, but before the SCSI xfer is complete. This is provided via a sd_scsi_wu_done hook, which enables work units to be restarted or otherwise modified before the SCSI xfer completion occurs. ok krw@
2013-03-31Use the discipline name instead of the product string when reporting theJoel Sing
attachment.
2013-03-31The return value of sd_free_resources() is never checked and all of theJoel Sing
implementations only ever returned zero. Change the return value from int to void instead of pretending it might mean something.
2013-03-31Fix compilation with debug.Joel Sing
2013-03-31Provide default resource allocation and free functions. Convert allJoel Sing
disciplines except for AOE and CRYPTO, which require custom handlers.
2013-03-30Provide wrappers for scsi_io_get() and scsi_io_put(), that also includeJoel Sing
the sd_sync check/wakeup. Remove some unnecessary NULL checks whilst here. ok krw@
2013-03-30Provide a default discipline interrupt handling function and migrate all ofJoel Sing
the disciplines that now have the same interrupt code. ok krw@
2013-03-29Decouple wakeups on work unit completion from the type of I/O beingJoel Sing
performed. ok krw@
2013-03-29sd_wu_pending is only decremented when scsi_done() or scsi_io_put() areJoel Sing
called. As a result, factor out the the sd_sync check/wakeup code and move it to after the scsi_done() call in sr_scsi_done(). Perform the same sd_sync check/wakeup after scsi_io_put() calls (including the addition of some that were previously missed). ok krw@
2013-03-25Factor out the code that is used to recreate work units - one copy of theJoel Sing
code is sufficient. ok krw@
2013-03-10Rename sc_dis to sc_targets, since it is an array of targets that alsoJoel Sing
happen to be softraid disciplines. ok krw@
2013-03-05Track attached softraid disciplines via a queue. This prevents the need toJoel Sing
scan the sparse SCSI targets array and simplifies code. Disciplines are now also shutdown in reverse attach order, making manually stacked softraid volumes somewhat more practical. ok krw@
2013-01-18The workunit completion needs to run at IPL_BIO, at least for now.Joel Sing
2013-01-18Tweak workunit completion.Joel Sing
2013-01-18Implement common workunit completion functions and handle the completionJoel Sing
via a workq callback. Also provide a discipline specific hook that allows it to optionally handle the final part of the workunit completion. ok krw@
2013-01-18Reset I/O counters when releasing ccbs.Joel Sing
ok krw@