Commit Graph

226 Commits

Author SHA1 Message Date
mav
8111cd0fbf Implement SPC-3 exceptions to SPC-2 RESERVE and RELEASE behavior. 2015-10-01 12:57:37 +00:00
mav
14e7a5f18f Unify PR variable names to reduce confusion. 2015-10-01 12:15:36 +00:00
mav
71ccc7181f Use proper STAILQ_* macros where possible. 2015-09-30 20:38:35 +00:00
mav
e0c0584312 Really implement PREVENT ALLOW MEDIUM REMOVAL command. 2015-09-29 15:12:40 +00:00
mav
9aafc68811 Report that we can read all flavours of DVD. Why not? 2015-09-29 10:44:37 +00:00
mav
a9dd74ee84 Add CD/DVD Capabilities and Mechanical Status Page.
This page is obsolete since MMC-4, but still used by some software.
2015-09-29 09:09:37 +00:00
mav
fb08575948 Umplement media load/eject support for removable devices.
In case of block backend eject really closes the backing store, while
load tries to open it back.  Failed store open is reported as no media.
2015-09-28 20:54:18 +00:00
mav
ba6084f689 Add to CTL initial support for CDROMs and removable devices.
Relnotes:	yes
2015-09-27 13:47:28 +00:00
mav
7903c2e5c3 Remove concept of control device. 2015-09-26 12:53:55 +00:00
mav
4fe0be11b5 Remove few more unused variables. 2015-09-26 11:39:54 +00:00
mav
70f018005e Remove some duplicate, legacy, dead and questionable code. 2015-09-26 11:28:45 +00:00
mav
68c4bb4bd1 Properly lock LUN in ctl_failover_lun(). 2015-09-25 22:45:23 +00:00
mav
c46f2e1439 Constify ctl_serialize_table. 2015-09-25 18:49:25 +00:00
mav
048c6e7723 Remove some dead code found by Clang analyzer. 2015-09-25 18:15:34 +00:00
mav
dc7c5180b5 Switch I/O time accounting from system time to uptime.
While there, make num_dmas accounted independently of CTL_TIME_IO.
2015-09-25 10:14:39 +00:00
mav
87240643a5 Collect DMA statistics on secondary HA node. 2015-09-25 09:55:51 +00:00
mav
e36a0596e3 Make HA handle datamove and done in a universal way, using port methods.
Now from primary node point of view requests transferred from secondary
node should look almost normal and always have valid port.
2015-09-25 09:14:29 +00:00
mav
ba2d211568 Remove some control_softc references. 2015-09-25 07:27:23 +00:00
mav
f83f810204 Allow WRITE SAME with NDOB bit set but without UNMAP.
This combination was originally forbidden, but allowed at spc4r3.
2015-09-24 15:59:08 +00:00
mav
661d29ba49 Add new report types to REPORT LUNS command.
This is only for completeness, since we have nothing new to report there.
2015-09-24 12:22:47 +00:00
mav
9e5012814b Update WRITE ATOMIC(16) support to sbc4r8 draft.
This is only a cosmetic change.  We still don't support atomic boundary
field in the CDB, but at least now we do it formally.
2015-09-24 08:04:47 +00:00
mav
09cbc1126e Add support for READ BUFFER(16) command. 2015-09-24 07:16:34 +00:00
mav
4c00714c1f Synchronize mode pages between HA peers.
We allow to modify only few fields in mode pages now, but still it is
not good if they unexpectedly change during failover.  Also this fixes
reporting of "Mode parameters changed" UAs on secondary node.
2015-09-23 18:33:00 +00:00
mav
6711ffe0ce Make HA peers announce their parameters on connect.
HA protocol requires strict version, parameters and configuration match.
Differences there may cause full set of problems up to kernel panic.
To avoid that, validate peer parameters on connect, and abort connection
immediately if some mismatch detected.
2015-09-23 15:49:27 +00:00
mav
35d91751bd Add support for Control extension mode page. 2015-09-22 14:55:46 +00:00
mav
ce8faf1ce9 Always execute REPORT LUNS and REQUEST SENSE commands locally.
REPORT LUNS command is more related to target rather then specific LUN.
This node may be primary for LUNs for some reason unknown to another,
and command forwarded to another node won't be able to report them.

REQUEST SENSE is related to LUN, but in our implementation it reports
only UAs and CAs, that are stored locally rather then on primary node.
2015-09-19 19:30:55 +00:00
mav
5c7a1c36c1 Split two command flags with different meaning.
This is only a cosmetical change.
2015-09-19 19:11:59 +00:00
mav
b5750fe77b Fix memory corruption when >128K transferred through HA link.
While there, do some cleaning.
2015-09-19 13:12:09 +00:00
mav
02db1cf02c Mark I/Os with DMA flag while moving data through the HA link. 2015-09-18 20:11:10 +00:00
mav
d696fece47 Relax serseq option operation for reads.
Previously, with serseq enabled, next command was unblocked only after
previous completed.  With this change, for read operations, next command
is unblocked as soon as last media read completed.  This is important
for frontends that actually wait for data move completion (like camtgt),
or when data are moved through the HA link, or especially when both.
2015-09-18 19:43:14 +00:00
mav
6c4148c76b Kill HA link and shutdown the threads on shutdown. 2015-09-18 12:08:00 +00:00
mav
e2cbfa7ae4 Replicate initiators WWPNs and names between HA peers. 2015-09-17 21:51:11 +00:00
mav
7d2c7a2790 Replicate port->init_devid to HA peer. 2015-09-17 20:36:34 +00:00
mav
5168f6a6d2 When reporting TPT UA, report which of thresholds was reached. 2015-09-17 17:00:36 +00:00
mav
c83e5e51a7 Report proper medium error code for VERIFY commands. 2015-09-17 12:52:18 +00:00
mav
6bfadefc07 Close potential race between datamove and HA failover. 2015-09-15 09:36:46 +00:00
mav
183453ee1f Implement data/status aggregation for secondary HA node.
For short read requests this reduces latency by 30%, reporting command
completion after two interlink roundtrips instead of full three.
2015-09-14 15:21:23 +00:00
mav
d119065944 Remove CTL_PRIV_LBA_LEN from HA messages.
Previously it was used for statistics, but now just a 16 extra bytes.
2015-09-14 09:56:01 +00:00
mav
b48d2e5828 Implement QUERY TASK, QUERY TASK SET and QUERY ASYNC EVENT.
Now we support most of SAM-5 task management.
2015-09-14 08:01:05 +00:00
mav
169f852b1d Improve read-only support. 2015-09-13 16:49:41 +00:00
mav
b61b12e919 Reannounce port to HA peer if LUN map changed after online. 2015-09-13 15:31:55 +00:00
mav
9f330a7e28 Report INQUIRY DATA HAS CHANGED for related LUNs on port on-/offline. 2015-09-13 14:52:31 +00:00
mav
a0c6a9234d Report CTL_UA_LUN_CHANGE on LUN map change. 2015-09-13 14:04:42 +00:00
mav
415ebdc1a8 Make TARGET RESET respect LUN mapping. 2015-09-13 13:00:20 +00:00
mav
7947a17ff4 Add HA support for CTL_TASK_I_T_NEXUS_RESET. 2015-09-12 20:06:22 +00:00
mav
7e1a392c4c Fix false CTL_UA_RES_RELEASE on secondary HA node. 2015-09-12 18:29:05 +00:00
mav
a4f6fb8257 Some HA polishing. 2015-09-12 12:46:04 +00:00
mav
f992fbc2ed Make ctld restart on primary HA node less invasive for secondary. 2015-09-11 14:47:35 +00:00
mav
7ee575bcca Reimplement CTL High Availability.
CTL HA functionality was originally implemented by Copan many years ago,
but large part of the sources was never published.  This change includes
clean room implementation of the missing code and fixes for many bugs.

This code supports dual-node HA with ALUA in four modes:
 - Active/Unavailable without interlink between nodes;
 - Active/Standby with second node handling only basic LUN discovery and
reservation, synchronizing with the first node through the interlink;
 - Active/Active with both nodes processing commands and accessing the
backing storage, synchronizing with the first node through the interlink;
 - Active/Active with second node working as proxy, transfering all
commands to the first node for execution through the interlink.

Unlike original Copan's implementation, depending on specific hardware,
this code uses simple custom TCP-based protocol for interlink.  It has
no authentication, so it should never be enabled on public interfaces.

The code may still need some polishing, but generally it is functional.

Relnotes:	yes
Sponsored by:	iXsystems, Inc.
2015-09-10 12:40:31 +00:00
mav
1d4ff31d06 Remove unused target and initiator IDs. 2015-09-10 10:46:21 +00:00