#
315939 |
|
25-Mar-2017 |
mav |
MFC r315084: Increase device openings to tagged maximum.
Some SIMs report much less untagged device openings then tagged ones. Target mode devices are not handled by regular probing routines, and so there is nothing to increase queue size for them to the SIM's maximum. To fix that resize the queue explicitly on ctl periph registration. This radically improves performance of mpt(4) in target mode.
Also fetch and report device queue statistics in `ctladm dumpstructs`, since regular way of `camcontrol tags` is not usable in target mode.
|
#
315891 |
|
24-Mar-2017 |
mav |
MFC r315022: Request change of SIM target role only when it is different.
Separate WWNs change into separate request to know what actually failed.
|
#
315889 |
|
24-Mar-2017 |
mav |
MFC r315030: Abort all ATIOs and INOTs queued to SIM on LUN disable.
Some SIMs may not abort them implicitly, that either fail the LUN disable request or just make us wait for those CCBs forever. With this change I can successfully disable LUNs on mpt(4). For isp(4), which aborts them implicitly, this change should be irrelevant.
|
#
315887 |
|
24-Mar-2017 |
mav |
MFC r315025: Switch work_queue from TAILQ to STAILQ.
It is mostly FIFO and we don't need random removal there.
|
#
315138 |
|
12-Mar-2017 |
mav |
MFC r314307: Add support for SIMs without autosense.
If we asked to send sense data by setting CAM_SEND_SENSE, but SIM didn't confirm transmission by setting CAM_SENT_SENSE, assume it was not sent. Queue the I/O back to CTL for later REQUEST SENSE with ctl_queue_sense(). This is needed for error reporting on SPI HBAs like ahc(4)/ahd(4).
|
#
314757 |
|
06-Mar-2017 |
mav |
MFC r314299, r314300: Fix residual length reporting in target mode.
This allows to properly handle cases when target wants to receive or send more data then initiator wants to send or receive. Previously in such cases isp(4) returned CAM_DATA_RUN_ERR, while now it returns resid > 0.
|
#
314751 |
|
06-Mar-2017 |
mav |
MFC r314247: Axe out some forever disabled questionable functionality.
This code is complicated enough even in its base shape.
|
#
314749 |
|
06-Mar-2017 |
mav |
MFC r314246: Improve CAM target frontend reference counting.
Before this change it was possible to trigger some use-after-free panics by disabling LUNs/ports under heavy load.
|
#
314745 |
|
06-Mar-2017 |
mav |
MFC r314204: Explicitly abort ATIO if CTIO sending status has failed.
This helps SIM to free related resources in questionable cases.
|
#
314740 |
|
06-Mar-2017 |
mav |
MFC r314200: We can't access periph after ctlfe_free_ccb().
|
#
314739 |
|
06-Mar-2017 |
mav |
MFC r314196: Unify ATIO/INOT CCBs requeuing.
|
#
314737 |
|
06-Mar-2017 |
mav |
MFC r314193: Some code cleanup.
|
#
314727 |
|
06-Mar-2017 |
mav |
MFC r314027: Do not blindly free completed ATIOs/INOTs on invalidation.
When LUN is disabled, SIM starts returning queued ATIOs/INOTs. But at the same time there can be some ATIOs/INOTs still carrying real new requests. If we free those, SIM may leak some resources, forever expecting for any response from us. So try to be careful, separating ATIOs/INOTs carrying requests which still must be processed, from ATIOs/INOTs completed with errors which can be freed.
|
#
313369 |
|
07-Feb-2017 |
mav |
MFC r312603: Add initial support for CTL module unloading.
It is only a first step and not perfect, but better then nothing. The main blocker is CAM target frontend, that can not be unloaded, since CAM does not have mechanism to unregister periph driver now.
|
#
313365 |
|
07-Feb-2017 |
mav |
MFC r312291, r312669: Make CTL frontends report kern_data_resid for under-/overruns.
It seems like kern_data_resid was never really implemented. This change finally does it. Now frontends update this field while transferring data, while CTL/backends getting it can more flexibly handle the result. At this point behavior should not change significantly, still reporting errors on write overrun, but that may be changed later, if we decide so.
CAM target frontend still does not properly handle overruns due to CAM API limitations. We may need to add some fields to struct ccb_accept_tio to pass information about initiator requested transfer size(s).
|
#
312845 |
|
26-Jan-2017 |
mav |
MFC r312026: Improve CAM_CDB_POINTER support.
|
#
312585 |
|
21-Jan-2017 |
mav |
MFC r310649: Allow more efficient use of private area.
There are 16 bytes of space, so we may store two pointers in one.
|
#
304417 |
|
18-Aug-2016 |
mav |
MFC r300293: Pass task management response information from CTL through CAM to isp(4), utilizing previously unused arg field of struct ccb_notify_acknowledge.
This makes new QUERY TASK, QUERY TASK SET and QUERY ASYNC EVENT requests really functional for CAM target mode drivers.
|
#
290776 |
|
13-Nov-2015 |
mav |
MFC r289881: Give CTL support for PIM_EXTLUNS when talking to CAM.
CTL itself still lives in flat LUN space, but it can generate extended numbers if CAM SIM reports such capability.
|
#
290775 |
|
13-Nov-2015 |
mav |
MFC r289843: Add partial support for QUERY TMF to CAM and isp(4).
This change allows to decode respective functions in isp(4) in target mode and pass them through CAM to CTL. Unfortunately neither CAM nor isp(4) support returning response info for those task management functions now.
On the other side I just have no initiator to test this functionality.
|
#
290172 |
|
29-Oct-2015 |
mav |
MFC r289819: Fix LUN disable in CAM broken at r285155.
|
#
288792 |
|
05-Oct-2015 |
mav |
MFC r288166: 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.
|
#
288732 |
|
05-Oct-2015 |
mav |
MFC r287621: 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.
|
#
288731 |
|
05-Oct-2015 |
mav |
MFC r287620: Remove unused target and initiator IDs.
|
#
288723 |
|
05-Oct-2015 |
mav |
MFC r287293: Remove 600 bytes of port_priv from struct ctl_io_hdr.
This field used only for camtgt frontend, and once it any way preallocates all requests, let it preallocate this memory too, not bothering core code.
|
#
288713 |
|
05-Oct-2015 |
mav |
MFC r285155: Make first step toward supporting target and initiator roles same time.
To avoid conflicts between target and initiator devices in CAM, make CTL use target ID reported by HBA as its initiator_id in XPT_PATH_INQ. That target ID is known to never be used for initiator role, so it won't conflict. For Fibre Channel and FireWire HBAs this specific ID choice is irrelevant since all target IDs there are virtual. Same time for SPI HBAs it seems could be even requirement to use same target ID for both initiator and target roles.
While there are some more things to polish in isp(4) driver, first tests of using both roles same time on the same port appeared successfull:
# camcontrol devlist -v scbus0 on isp0 bus 0: <FREEBSD CTLDISK 0001> at scbus0 target 1 lun 0 (da20,pass21) <> at scbus0 target 256 lun 0 (ctl0) <> at scbus0 target -1 lun ffffffff (ctl1)
|
#
284798 |
|
25-Jun-2015 |
mav |
MFC r284640: Bring per-port LUN enable/disable code up to date: - remove last remnants of never implemented multiple targets support; - implement missing support for LUN mapping in this area.
Due to existing locking constraints LUN mapping code is practically unlocked at this point. Hopefully it is not racy enough to live until somebody get idea how to call sleeping fronend methods under lock also taken by the same frontend in non-sleepable context. :(
|
#
284794 |
|
25-Jun-2015 |
mav |
MFC r284622: Remove device queue freeze handling and replace it with dummy.
At this point CTL has no known use case for device queue freezes. Same time existing (considered to be broken) code was found to cause modify-after-free issues.
|
#
284793 |
|
25-Jun-2015 |
mav |
MFC r284541: Change ATIO/INOT counting to prevent periph destruction while requests are still running inside CTL.
|
#
284586 |
|
18-Jun-2015 |
mav |
MFC r284013: Allow setting only WWNN or only WWPN.
|
#
277919 |
|
30-Jan-2015 |
mav |
MFC r277247: Don't count status as sent until CTIO completes successfully.
If we aggregated status sending with data move and got error, allow status to be updated and resent again separately. Without this command may stuck without status sent at all.
|
#
276614 |
|
03-Jan-2015 |
mav |
MFC r275942: Reduce number of places where global control_softc is used.
At some point we may want to have several CTL instances, and that is not really impossible.
|
#
275882 |
|
18-Dec-2014 |
mav |
MFC r275365: Move ctlfe_onoffline() out of lock to let it sleep when needed.
Do some more other polishing while there.
|
#
275881 |
|
18-Dec-2014 |
mav |
MFC r275058: Coalesce last data move and command status for read commands.
Make CTL core and block backend set success status before initiating last data move for read commands. Make CAM target and iSCSI frontends detect such condition and send command status together with data. New I/O flag allows to skip duplicate status sending on later fe_done() call.
For Fibre Channel this change saves one of three interrupts per read command, increasing performance from 126K to 160K IOPS. For iSCSI this change saves one of three PDUs per read command, increasing performance from 1M to 1.2M IOPS.
Sponsored by: iXsystems, Inc.
|
#
275880 |
|
18-Dec-2014 |
mav |
MFC r275032: Decouple datamove/done logic from CTL status set.
|
#
275878 |
|
18-Dec-2014 |
mav |
MFC r274962: Replace home-grown CTL IO allocator with UMA.
Old allocator created significant lock congestion protecting its lists of preallocated I/Os, while UMA provides much better SMP scalability. The downside of UMA is lack of reliable preallocation, that could guarantee successful allocation in non-sleepable environments. But careful code review shown, that only CAM target frontend really has that requirement. Fix that making that frontend preallocate and statically bind CTL I/O for every ATIO/INOT it preallocates any way. That allows to avoid allocations in hot I/O path. Other frontends either may sleep in allocation context or can properly handle allocation errors.
On 40-core server with 6 ZVOL-backed LUNs and 7 iSCSI client connections this change increases peak performance from ~700K to >1M IOPS! Yay! :)
Sponsored by: iXsystems, Inc.
|
#
275493 |
|
05-Dec-2014 |
mav |
MFC r274785: Partially reconstruct Active/Standby clusting.
In this mode one head is in Active state, supporting all commands, while another is in Standby state, supporting only minimal LUN discovery subset.
It is still incomplete since Standby state requires reservation support, which is impossible to do right without having interlink between heads. But it allows to run some basic experiments.
|
#
274389 |
|
11-Nov-2014 |
mav |
MFC r274081: Fix residual copy/paste in r274080.
|
#
274388 |
|
11-Nov-2014 |
mav |
MFC r274080: Improve error handling around duplicate lun and port enable.
This fixes kernel panic if port enabled twice and then disabled.
|
#
273321 |
|
20-Oct-2014 |
mav |
MFC r273008: Remove stale comments.
|
#
273319 |
|
20-Oct-2014 |
mav |
MFC r272947: Give physical and virtual ports numbers some more meaning.
|
#
273318 |
|
20-Oct-2014 |
mav |
MFC r272939: Shorten frontend name.
|
#
273317 |
|
20-Oct-2014 |
mav |
MFC r272938: Filter out duplicate AC_PATH_REGISTERED async events.
Queued async events handling in CAM opened race, that may lead to duplicate AC_PATH_REGISTERED events delivery during boot. That was not happening before r272935 because the driver was initialized later. After that change it started create duplicate ports in CTL.
|
#
273316 |
|
20-Oct-2014 |
mav |
MFC r272935: Mark CTL frontend's CAM driver as CAM_PERIPH_DRV_EARLY.
Target mode operation does not depend on the initiator mode scan process. This change allows the target driver to attach earlier and receive some async events (like AC_CONTRACT) that could be lost otherwise.
|
#
273311 |
|
20-Oct-2014 |
mav |
MFC r272734: Add support for WRITE ATOMIC (16) command and report SBC-4 compliance.
Atomic writes are only supported for ZVOLs in "dev" mode. In other cases atomicity can not be guarantied and so the command is blocked.
|
#
269296 |
|
30-Jul-2014 |
mav |
MFC r268767: Add support for VMWare dialect of EXTENDED COPY command, aka VAAI Clone.
This allows to clone VMs and move them between LUNs inside one storage host without generating extra network traffic to the initiator and back, and without being limited by network bandwidth.
LUNs participating in copy operation should have UNIQUE NAA or EUI IDs set. For LUNs without these IDs VMWare will use traditional copy operations.
Beware: the above LUN IDs explicitly set to values non-unique from the VM cluster point of view may cause data corruption if wrong LUN is addressed!
Sponsored by: iXsystems, Inc.
|
#
268697 |
|
15-Jul-2014 |
mav |
MFC r268418: Enable TAS feature: notify initiator if its command was aborted by other.
That should make operation more kind to multi-initiator environment. Without this, other initiators may find out that something bad happened to their commands only via command timeout.
|
#
268694 |
|
15-Jul-2014 |
mav |
MFC r268363: Add support for READ FULL STATUS action of PERSISTENT RESERVE IN command.
|
#
268692 |
|
15-Jul-2014 |
mav |
MFC r268362: Teach ctl_add_initiator() to dynamically allocate IIDs from pool.
If port passed negative IID value, the function will try to allocate IID from the pool of unused, based on passed wwpn or name arguments. It does all its best to make IID unique and persistent across reconnects.
This makes persistent reservation properly work for iSCSI. Previously, in case of reconnects, reservation could be unexpectedly lost, or even migrate between intiators.
|
#
268683 |
|
15-Jul-2014 |
mav |
MFC r268293: Burry devid port method, which was a gross hack.
Instead make ports provide wanted port and target IDs, and LUNs provide wanted LUN IDs. After that core Device ID VPD code only had to link all of them together and add relative port and port group numbers.
LUN ID for iSCSI LUNs no longer created by CTL, but by ctld, and passed to CTL as "scsiname" LUN option. This makes LUNs to report the same set of IDs, independently from the port through which it is accessed, as required by SCSI specifications.
|
#
268677 |
|
15-Jul-2014 |
mav |
MFC r268266, r268275: Separate concepts of frontend and port.
Before iSCSI implementation CTL had no knowledge about frontend drivers, it had only frontends, which really were ports (alike to LUNs, if comparing to backends). But iSCSI added there ioctl() method, which does not belong to frontend as a port, but belongs to a frontend driver.
|
#
268676 |
|
15-Jul-2014 |
mav |
MFC r268265: Remove targ_enable()/targ_disable() frontend methods.
Those methods were never implemented, and I believe that their concept is wrong, since single frontend (SCSI port) can not handle several targets.
|
#
265641 |
|
08-May-2014 |
mav |
MFC r264884: Make CAM target CTL frontend respect SIM I/O size limitations.
If datamove size is bigger then SIM can handle, or it has more segments then this code can handle -- split it into several CTIO requests.
|
#
260387 |
|
06-Jan-2014 |
scottl |
MFC Alexander Motin's direct dispatch, multi-queue, and finer-grained locking support for CAM
r256826: Fix several target mode SIMs to not blindly clear ccb_h.flags field of ATIO CCBs. Not all CCB flags there belong to them.
r256836: Remove hard limit on number of BIOs handled with one ATA TRIM request.
r256843: Merge CAM locking changes from the projects/camlock branch to radically reduce lock congestion and improve SMP scalability of the SCSI/ATA stack, preparing the ground for the coming next GEOM direct dispatch support.
r256888: Unconditionally acquire periph reference on CCB allocation failure.
r256895: Fix memory and references leak due to unfreed path.
r256960: Move CAM_UNQUEUED_INDEX setting to the last moment and under the periph lock. This fixes race condition with cam_periph_ccbwait(), causing use-after-free.
r256975: Minor (mostly cosmetical) addition to r256960.
r257054: Some microoptimizations for da and ada drivers: - Replace ordered_tag_count counter with single flag; - From da remove outstanding_cmds counter, duplicating pending_ccbs list; - From da_softc remove unused links field.
r257482: Fix lock recursion, triggered by `smartctl -a /dev/adaX`.
r257501: Make getenv_*() functions and respectively TUNABLE_*_FETCH() macros not allocate memory and so not require sleepable environment. getenv() has already used on-stack temporary storage, so just use it more rationally. getenv_string() receives buffer as argument, so don't need another one.
r257914: Some CAM locks polishing: - Fix LOR and possible lock recursion when handling high-power commands. Introduce new lock to protect left power quota and list of frozen devices. - Correct locking around xpt periph creation. - Remove seems never used XPT_FLAG_OPEN xpt periph flag.
Again, Netflix assisted with testing the merge, but all of the credit goes to Alexander and iX Systems.
Submitted by: mav Sponsored by: iX Systems
|
#
288732 |
|
05-Oct-2015 |
mav |
MFC r287621: 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.
|
#
288731 |
|
05-Oct-2015 |
mav |
MFC r287620: Remove unused target and initiator IDs.
|
#
288723 |
|
05-Oct-2015 |
mav |
MFC r287293: Remove 600 bytes of port_priv from struct ctl_io_hdr.
This field used only for camtgt frontend, and once it any way preallocates all requests, let it preallocate this memory too, not bothering core code.
|
#
288713 |
|
05-Oct-2015 |
mav |
MFC r285155: Make first step toward supporting target and initiator roles same time.
To avoid conflicts between target and initiator devices in CAM, make CTL use target ID reported by HBA as its initiator_id in XPT_PATH_INQ. That target ID is known to never be used for initiator role, so it won't conflict. For Fibre Channel and FireWire HBAs this specific ID choice is irrelevant since all target IDs there are virtual. Same time for SPI HBAs it seems could be even requirement to use same target ID for both initiator and target roles.
While there are some more things to polish in isp(4) driver, first tests of using both roles same time on the same port appeared successfull:
# camcontrol devlist -v scbus0 on isp0 bus 0: <FREEBSD CTLDISK 0001> at scbus0 target 1 lun 0 (da20,pass21) <> at scbus0 target 256 lun 0 (ctl0) <> at scbus0 target -1 lun ffffffff (ctl1)
|
#
284798 |
|
25-Jun-2015 |
mav |
MFC r284640: Bring per-port LUN enable/disable code up to date: - remove last remnants of never implemented multiple targets support; - implement missing support for LUN mapping in this area.
Due to existing locking constraints LUN mapping code is practically unlocked at this point. Hopefully it is not racy enough to live until somebody get idea how to call sleeping fronend methods under lock also taken by the same frontend in non-sleepable context. :(
|
#
284794 |
|
25-Jun-2015 |
mav |
MFC r284622: Remove device queue freeze handling and replace it with dummy.
At this point CTL has no known use case for device queue freezes. Same time existing (considered to be broken) code was found to cause modify-after-free issues.
|
#
284793 |
|
25-Jun-2015 |
mav |
MFC r284541: Change ATIO/INOT counting to prevent periph destruction while requests are still running inside CTL.
|
#
284586 |
|
18-Jun-2015 |
mav |
MFC r284013: Allow setting only WWNN or only WWPN.
|
#
277919 |
|
30-Jan-2015 |
mav |
MFC r277247: Don't count status as sent until CTIO completes successfully.
If we aggregated status sending with data move and got error, allow status to be updated and resent again separately. Without this command may stuck without status sent at all.
|
#
276614 |
|
03-Jan-2015 |
mav |
MFC r275942: Reduce number of places where global control_softc is used.
At some point we may want to have several CTL instances, and that is not really impossible.
|
#
275882 |
|
18-Dec-2014 |
mav |
MFC r275365: Move ctlfe_onoffline() out of lock to let it sleep when needed.
Do some more other polishing while there.
|
#
275881 |
|
18-Dec-2014 |
mav |
MFC r275058: Coalesce last data move and command status for read commands.
Make CTL core and block backend set success status before initiating last data move for read commands. Make CAM target and iSCSI frontends detect such condition and send command status together with data. New I/O flag allows to skip duplicate status sending on later fe_done() call.
For Fibre Channel this change saves one of three interrupts per read command, increasing performance from 126K to 160K IOPS. For iSCSI this change saves one of three PDUs per read command, increasing performance from 1M to 1.2M IOPS.
Sponsored by: iXsystems, Inc.
|
#
275880 |
|
18-Dec-2014 |
mav |
MFC r275032: Decouple datamove/done logic from CTL status set.
|
#
275878 |
|
18-Dec-2014 |
mav |
MFC r274962: Replace home-grown CTL IO allocator with UMA.
Old allocator created significant lock congestion protecting its lists of preallocated I/Os, while UMA provides much better SMP scalability. The downside of UMA is lack of reliable preallocation, that could guarantee successful allocation in non-sleepable environments. But careful code review shown, that only CAM target frontend really has that requirement. Fix that making that frontend preallocate and statically bind CTL I/O for every ATIO/INOT it preallocates any way. That allows to avoid allocations in hot I/O path. Other frontends either may sleep in allocation context or can properly handle allocation errors.
On 40-core server with 6 ZVOL-backed LUNs and 7 iSCSI client connections this change increases peak performance from ~700K to >1M IOPS! Yay! :)
Sponsored by: iXsystems, Inc.
|
#
275493 |
|
05-Dec-2014 |
mav |
MFC r274785: Partially reconstruct Active/Standby clusting.
In this mode one head is in Active state, supporting all commands, while another is in Standby state, supporting only minimal LUN discovery subset.
It is still incomplete since Standby state requires reservation support, which is impossible to do right without having interlink between heads. But it allows to run some basic experiments.
|
#
274389 |
|
11-Nov-2014 |
mav |
MFC r274081: Fix residual copy/paste in r274080.
|
#
274388 |
|
11-Nov-2014 |
mav |
MFC r274080: Improve error handling around duplicate lun and port enable.
This fixes kernel panic if port enabled twice and then disabled.
|
#
273321 |
|
20-Oct-2014 |
mav |
MFC r273008: Remove stale comments.
|
#
273319 |
|
20-Oct-2014 |
mav |
MFC r272947: Give physical and virtual ports numbers some more meaning.
|
#
273318 |
|
20-Oct-2014 |
mav |
MFC r272939: Shorten frontend name.
|
#
273317 |
|
20-Oct-2014 |
mav |
MFC r272938: Filter out duplicate AC_PATH_REGISTERED async events.
Queued async events handling in CAM opened race, that may lead to duplicate AC_PATH_REGISTERED events delivery during boot. That was not happening before r272935 because the driver was initialized later. After that change it started create duplicate ports in CTL.
|
#
273316 |
|
20-Oct-2014 |
mav |
MFC r272935: Mark CTL frontend's CAM driver as CAM_PERIPH_DRV_EARLY.
Target mode operation does not depend on the initiator mode scan process. This change allows the target driver to attach earlier and receive some async events (like AC_CONTRACT) that could be lost otherwise.
|
#
273311 |
|
20-Oct-2014 |
mav |
MFC r272734: Add support for WRITE ATOMIC (16) command and report SBC-4 compliance.
Atomic writes are only supported for ZVOLs in "dev" mode. In other cases atomicity can not be guarantied and so the command is blocked.
|
#
269296 |
|
30-Jul-2014 |
mav |
MFC r268767: Add support for VMWare dialect of EXTENDED COPY command, aka VAAI Clone.
This allows to clone VMs and move them between LUNs inside one storage host without generating extra network traffic to the initiator and back, and without being limited by network bandwidth.
LUNs participating in copy operation should have UNIQUE NAA or EUI IDs set. For LUNs without these IDs VMWare will use traditional copy operations.
Beware: the above LUN IDs explicitly set to values non-unique from the VM cluster point of view may cause data corruption if wrong LUN is addressed!
Sponsored by: iXsystems, Inc.
|
#
268697 |
|
15-Jul-2014 |
mav |
MFC r268418: Enable TAS feature: notify initiator if its command was aborted by other.
That should make operation more kind to multi-initiator environment. Without this, other initiators may find out that something bad happened to their commands only via command timeout.
|
#
268694 |
|
15-Jul-2014 |
mav |
MFC r268363: Add support for READ FULL STATUS action of PERSISTENT RESERVE IN command.
|
#
268692 |
|
15-Jul-2014 |
mav |
MFC r268362: Teach ctl_add_initiator() to dynamically allocate IIDs from pool.
If port passed negative IID value, the function will try to allocate IID from the pool of unused, based on passed wwpn or name arguments. It does all its best to make IID unique and persistent across reconnects.
This makes persistent reservation properly work for iSCSI. Previously, in case of reconnects, reservation could be unexpectedly lost, or even migrate between intiators.
|
#
268683 |
|
15-Jul-2014 |
mav |
MFC r268293: Burry devid port method, which was a gross hack.
Instead make ports provide wanted port and target IDs, and LUNs provide wanted LUN IDs. After that core Device ID VPD code only had to link all of them together and add relative port and port group numbers.
LUN ID for iSCSI LUNs no longer created by CTL, but by ctld, and passed to CTL as "scsiname" LUN option. This makes LUNs to report the same set of IDs, independently from the port through which it is accessed, as required by SCSI specifications.
|
#
268677 |
|
15-Jul-2014 |
mav |
MFC r268266, r268275: Separate concepts of frontend and port.
Before iSCSI implementation CTL had no knowledge about frontend drivers, it had only frontends, which really were ports (alike to LUNs, if comparing to backends). But iSCSI added there ioctl() method, which does not belong to frontend as a port, but belongs to a frontend driver.
|
#
268676 |
|
15-Jul-2014 |
mav |
MFC r268265: Remove targ_enable()/targ_disable() frontend methods.
Those methods were never implemented, and I believe that their concept is wrong, since single frontend (SCSI port) can not handle several targets.
|
#
265641 |
|
08-May-2014 |
mav |
MFC r264884: Make CAM target CTL frontend respect SIM I/O size limitations.
If datamove size is bigger then SIM can handle, or it has more segments then this code can handle -- split it into several CTIO requests.
|
#
260387 |
|
06-Jan-2014 |
scottl |
MFC Alexander Motin's direct dispatch, multi-queue, and finer-grained locking support for CAM
r256826: Fix several target mode SIMs to not blindly clear ccb_h.flags field of ATIO CCBs. Not all CCB flags there belong to them.
r256836: Remove hard limit on number of BIOs handled with one ATA TRIM request.
r256843: Merge CAM locking changes from the projects/camlock branch to radically reduce lock congestion and improve SMP scalability of the SCSI/ATA stack, preparing the ground for the coming next GEOM direct dispatch support.
r256888: Unconditionally acquire periph reference on CCB allocation failure.
r256895: Fix memory and references leak due to unfreed path.
r256960: Move CAM_UNQUEUED_INDEX setting to the last moment and under the periph lock. This fixes race condition with cam_periph_ccbwait(), causing use-after-free.
r256975: Minor (mostly cosmetical) addition to r256960.
r257054: Some microoptimizations for da and ada drivers: - Replace ordered_tag_count counter with single flag; - From da remove outstanding_cmds counter, duplicating pending_ccbs list; - From da_softc remove unused links field.
r257482: Fix lock recursion, triggered by `smartctl -a /dev/adaX`.
r257501: Make getenv_*() functions and respectively TUNABLE_*_FETCH() macros not allocate memory and so not require sleepable environment. getenv() has already used on-stack temporary storage, so just use it more rationally. getenv_string() receives buffer as argument, so don't need another one.
r257914: Some CAM locks polishing: - Fix LOR and possible lock recursion when handling high-power commands. Introduce new lock to protect left power quota and list of frozen devices. - Correct locking around xpt periph creation. - Remove seems never used XPT_FLAG_OPEN xpt periph flag.
Again, Netflix assisted with testing the merge, but all of the credit goes to Alexander and iX Systems.
Submitted by: mav Sponsored by: iX Systems
|