summaryrefslogtreecommitdiffstats
path: root/sys/scsi/mpath_emc.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Nuke unneeded 'sa_inqbuf' member of struct scsi_attach_args. It alwayskrw2020-06-301-2/+2
| | | | | points to the inquiry data contained in the struct scsi_link pointed to by the other member, sa_sc_link.
* Nuke some unused variables, tweak some declarations andkrw2019-08-171-3/+2
| | | | variable names into a consistant idiom.
* Remove some includes include-what-you-use claims don'tjsg2015-03-141-2/+1
| | | | | | | have any direct symbols used. Tested for indirect use by compiling amd64/i386/sparc64 kernels. ok tedu@ deraadt@
* remove uneeded proc.h includesjsg2014-09-141-2/+1
| | | | ok mpi@ kspillner@
* move scsi_xs_put after checks that use fields in the xsjmatthew2014-04-191-3/+3
| | | | ok dlg@
* implement emc_mpath_checksense() according to what my cx500 throws.dlg2014-04-191-1/+10
| | | | tested by jmatthew@
* rework this to implement the active path checks when mpath asks fordlg2014-04-171-77/+48
| | | | | | | it rather than on attach. just need to implement a sense handler to detect failover and this is done. thanks to jmatthew@ for plugging this together again for me.
* Add a DVACT_WAKEUP op to the *_activate() API. This is called after thederaadt2013-12-061-4/+1
| | | | | | | | kernel resumes normal (non-cold, able to run processes, etc) operation. Previously we were relying on specific DVACT_RESUME op's in drivers creating callback/threads themselves, but that has become too common, indicating the need for a built-in mechanism. ok dlg kettenis, tested by a sufficient amount of people
* fix format string; OK deraadt@gsoares2013-11-231-2/+2
|
* make path driver match routes return 8 so they will definitely be higherdlg2013-08-271-2/+2
| | | | | than the real device drivers. ses returns 3 on some dells, which could be confusing for autoconf if it has to decide between that and a path driver.
* get rid of the different path scheduler types, which simplifies thedlg2013-08-271-3/+2
| | | | | | code that picks the next path. we assume roundrobin within a group of paths now. the asym sym(4) devices work around this by putting every path in its own group.
* these were forgotten in the change from pointing paths to groups insteaddlg2013-08-271-2/+2
| | | | | | of devices. fixes compilation when theyre enabled. how embarrassment.
* when i first imagined how paths on mpath worked, i thought thedlg2013-08-261-13/+7
| | | | | | | | | | | | | | | | | midlayer would be able to call things on paths to explicitely online or offline them. turns out thats not how the Real World(tm) works, instead its better to wait for failure and probe for the status of paths, and pick the active group of paths from that. there's even evidence that the mechanisms for forcing controllers into active/passive roles from the scsi initiator are being deprecated. they expect hosts to be able to cope with arbitrary controller role changes and failover accordingly. this replaces the online and offline function pointers in the path_ops structure with a status check function pointer. instead of returning a state, the checker is expected to call mpath_path_status() when its finished figuring out what the state is.
* checksense handlers in path drivers can return MPATH_SENSE_DECLINEDdlg2013-08-261-2/+2
| | | | | | | | (who can tell ive spent time in web servers) to say they decline interpreting the sense data, or MPATH_SENSE_FAILOVER to say the sense data is from the controller saying its failed over. all path drivers currently decline handling sense data.
* introduce the idea of groups of paths. mpath had stuff to manageddlg2013-08-261-4/+7
| | | | | | | | | | | | | | | | | | | | | devices and paths. devices are what mpath presents as targets on its scsibus, and paths are the things attached to hardware controllers that are available to shove io down to the actual real target. all paths were considered usable for handling io on behalf of a device. this adds groups in between devices and paths. only paths on the first group in the list will now be used to handle io now. sym devices will only have one group. asym devices will treat each path as a different group. rdac, emc, and hds will group paths based on which controller in the array theyre connected to. in the future we will intercept sense data from passive controllers and use that to start running checks to pick a new primary group so we can handle controller failover situations. the group id in hds(4) is currently busted, everything else should be correct.
* support "failover" style access to volumes, ie, only use one activedlg2011-07-111-4/+4
| | | | | | | | | | | path when talking to an array until it goes away, then you fail over to the next active path. im using this to talk to ses(4) in my dell, and allows us to support arrays that have multiple controllers but have no way of reporting which one is active. using the MRU semantic means we can talk to them without them flipping the active role between its controllers all the time. claudios transtec iscsi box is like this.
* Remove config_activate() and DVACT_ACTIVATE. PCMCIA's the only thingmatthew2011-07-031-2/+1
| | | | | | | | that's ever used it, and it's long since been changed to use DVACT_{QUIESCE,SUSPEND,RESUME} instead. ok deraadt@, dlg@; miod@ also agreed with this idea when I brought it up a few weeks ago
* pass the dma_alloced memory rather than a pointer to its pointer.dlg2011-06-161-2/+2
|
* build inquiry with scsi_init_inquiry().dlg2011-06-151-10/+2
|
* clean up the path ops struct a bit. the path drivers init their xsh withdlg2011-04-281-2/+1
| | | | | their start routines, they dont have to pass pointers to them in the ops struct.
* whitespace fixes.dlg2011-04-271-15/+15
|
* use dma safe memory when talking to devices. this was written before bigmemdlg2011-04-271-18/+33
| | | | | | required this. requested by deraadt@
* move forward with scsi multipathing.dlg2011-04-051-0/+298
the big change is how paths between mpath capable devices and the kernel are managed. originally the midlayer would steal the links to the devices and hide them behind mpath. all the changes an adapter made to a link (eg activate or detach), the midlayer had to test if it was an mpath link and then call special mpath code to handle it. the original code also assumed that all paths behaved the same, but the reality is that different devices have different command sets and behaviours. figuring out which behaviour to pick and prioritising them is basically the same job autoconf does with match and attach. rather than special casing mpath in the midlayer and reimplimenting autoconf, this turns paths into actual device drivers with match and attach routines. after they figure out if the path is active, they then give it to mpath(4) to use as a backend. i have written drivers for symmetric access devices (sym(4)) where all paths to the same logical unit are as good as each other, lsi/engenio arrays (rdac(4), and emc arrays (emc(4)). the rdac and emc drivers only detect active paths at attach time, the do not cope if the controller changes state unless you unplug the path and plug it in again to retest the active state. they also do not have support for directing array failover. operating and hoplugging has been tested with mpii(4), fc and sas mpi(4), and iscsi via vscsi (claudio did this too). ok krw@ deraadt@