Emulex Logo
OneCoreā„¢ Storage SDK Release 11.2
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ocs_scsi.c File Reference
#include "ocs.h"
#include "ocs_els.h"
#include "ocs_scsi_fc.h"
#include "ocs_dif.h"

Go to the source code of this file.

Detailed Description

OCS Linux SCSI API base driver implementation.

Definition in file ocs_scsi.c.

Macros

#define SCSI_IOFMT   "[%04x][i:%0*x t:%0*x h:%04x]"
 
#define SCSI_ITT_SIZE(ocs)   ((ocs->ocs_xport == OCS_XPORT_FC) ? 4 : 8)
 
#define SCSI_IOFMT_ARGS(io)   io->instance_index, SCSI_ITT_SIZE(io->ocs), io->init_task_tag, SCSI_ITT_SIZE(io->ocs), io->tgt_task_tag, io->hw_tag
 
#define enable_tsend_auto_resp(ocs)   ((ocs->ctrlmask & OCS_CTRLMASK_XPORT_DISABLE_AUTORSP_TSEND) == 0)
 
#define enable_treceive_auto_resp(ocs)   ((ocs->ctrlmask & OCS_CTRLMASK_XPORT_DISABLE_AUTORSP_TRECEIVE) == 0)
 
#define scsi_io_printf(io, fmt,...)
 
#define scsi_io_trace(io, fmt,...)
 
#define scsi_log(ocs, fmt,...)
 

Functions

static int32_t ocs_target_send_bls_resp (ocs_io_t *io, ocs_scsi_io_cb_t cb, void *arg)
 Complete abort request. More...
 
static int32_t ocs_scsi_abort_io_cb (struct ocs_hal_io_s *hio, ocs_remote_node_t *rnode, uint32_t len, int32_t status, uint32_t ext_status, void *arg)
 Callback for an aborted IO. More...
 
static void ocs_scsi_io_free_ovfl (ocs_io_t *io)
 Free overflow SGL. More...
 
static uint32_t ocs_scsi_count_sgls (ocs_hal_dif_info_t *hal_dif, ocs_scsi_sgl_t *sgl, uint32_t sgl_count)
 Return count of SGE's required for request. More...
 
static int ocs_scsi_dif_guard_is_crc (uint8_t direction, ocs_hal_dif_info_t *dif_info)
 Determine if an IO is using CRC for DIF guard format. More...
 
static ocs_scsi_io_status_e ocs_scsi_dif_check_unknown (ocs_io_t *io, uint32_t length, uint32_t check_length, int is_crc)
 Check a block and DIF data, computing the appropriate SCSI status. More...
 
static uint32_t ocs_scsi_dif_check_guard (ocs_hal_dif_info_t *dif_info, ocs_scsi_vaddr_len_t addrlen[], uint32_t addrlen_count, ocs_dif_t *dif, int is_crc)
 Check the block guard of block data. More...
 
static uint32_t ocs_scsi_dif_check_app_tag (ocs_t *ocs, ocs_hal_dif_info_t *dif_info, uint16_t exp_app_tag, ocs_dif_t *dif)
 Check the app tag of dif data. More...
 
static uint32_t ocs_scsi_dif_check_ref_tag (ocs_t *ocs, ocs_hal_dif_info_t *dif_info, uint32_t exp_ref_tag, ocs_dif_t *dif)
 Check the ref tag of dif data. More...
 
static int32_t ocs_scsi_convert_dif_info (ocs_t *ocs, ocs_scsi_dif_info_t *scsi_dif_info, ocs_hal_dif_info_t *hal_dif_info)
 Convert SCSI API T10 DIF information into the FC HAL format. More...
 
static int32_t ocs_scsi_io_dispatch_hal_io (ocs_io_t *io, ocs_hal_io_t *hio)
 Dispatch IO. More...
 
static int32_t ocs_scsi_io_dispatch_no_hal_io (ocs_io_t *io)
 Dispatch IO. More...
 
static void _ocs_scsi_io_free (void *arg)
 Free a SCSI IO context (internal). More...
 
static uint32_t ocs_fc_getbe32 (void *p)
 Returns a big-endian 32-bit value given a pointer. More...
 
void ocs_scsi_io_alloc_enable (ocs_node_t *node)
 Enable IO allocation. More...
 
void ocs_scsi_io_alloc_disable (ocs_node_t *node)
 Disable IO allocation. More...
 
int32_t ocs_scsi_io_alloc_enabled (ocs_node_t *node)
 Get state of IO allocation. More...
 
ocs_io_t * ocs_scsi_io_alloc (ocs_node_t *node, ocs_scsi_io_role_e role)
 Allocate a SCSI IO context. More...
 
void ocs_scsi_io_free (ocs_io_t *io)
 Free a SCSI IO context. More...
 
static int32_t ocs_scsi_send_io (ocs_hal_io_type_e type, ocs_node_t *node, ocs_io_t *io, uint32_t lun, ocs_scsi_tmf_cmd_e tmf, uint8_t *cdb, uint32_t cdb_len, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint32_t wire_len, uint32_t first_burst, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Send an FCP IO. More...
 
static void ocs_target_io_cb (ocs_hal_io_t *hio, ocs_remote_node_t *rnode, uint32_t length, int32_t status, uint32_t ext_status, void *app)
 Target response completion callback. More...
 
static int32_t ocs_scsi_build_sgls (ocs_hal_t *hal, ocs_hal_io_t *hio, ocs_hal_dif_info_t *hal_dif, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, ocs_hal_io_type_e type)
 
static void ocs_log_sgl (ocs_io_t *io)
 This function logs the SGLs for an IO. More...
 
static int32_t ocs_scsi_check_pending_async_cb (ocs_hal_t *hal, int32_t status, uint8_t *mqe, void *arg)
 Check pending error asynchronous callback function. More...
 
void ocs_scsi_check_pending (ocs_t *ocs)
 Check for pending IOs to dispatch. More...
 
int32_t ocs_scsi_io_dispatch (ocs_io_t *io, void *cb)
 Attempt to dispatch a non-abort IO. More...
 
int32_t ocs_scsi_io_dispatch_abort (ocs_io_t *io, void *cb)
 Attempt to dispatch an Abort IO. More...
 
static int32_t ocs_scsi_xfer_data (ocs_io_t *io, uint32_t flags, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint64_t xwire_len, ocs_hal_io_type_e type, int enable_ar, ocs_scsi_io_cb_t cb, void *arg)
 Send read/write data. More...
 
int32_t ocs_scsi_send_rd_data (ocs_io_t *io, uint32_t flags, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint64_t len, ocs_scsi_io_cb_t cb, void *arg)
 
int32_t ocs_scsi_recv_wr_data (ocs_io_t *io, uint32_t flags, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint64_t len, ocs_scsi_io_cb_t cb, void *arg)
 
int32_t ocs_scsi_send_resp (ocs_io_t *io, uint32_t flags, ocs_scsi_cmd_resp_t *rsp, ocs_scsi_io_cb_t cb, void *arg)
 Send response data. More...
 
int32_t ocs_scsi_send_tmf_resp (ocs_io_t *io, ocs_scsi_tmf_resp_e rspcode, uint8_t addl_rsp_info[3], ocs_scsi_io_cb_t cb, void *arg)
 Send TMF response data. More...
 
static int32_t ocs_target_abort_cb (ocs_hal_io_t *hio, ocs_remote_node_t *rnode, uint32_t length, int32_t status, uint32_t ext_status, void *app)
 Process target abort callback. More...
 
int32_t ocs_scsi_tgt_abort_io (ocs_io_t *io, bool send_abts, ocs_scsi_io_cb_t cb, void *arg)
 Abort a target IO. More...
 
static int32_t ocs_target_bls_resp_cb (ocs_hal_io_t *hio, ocs_remote_node_t *rnode, uint32_t length, int32_t status, uint32_t ext_status, void *app)
 Process target BLS response callback. More...
 
void ocs_scsi_io_complete (ocs_io_t *io)
 Notify the base driver that the IO is complete. More...
 
static void ocs_initiator_io_cb (ocs_hal_io_t *hio, ocs_remote_node_t *rnode, uint32_t length, int32_t status, uint32_t ext_status, void *app)
 Handle initiator IO completion. More...
 
int32_t ocs_scsi_send_rd_io (ocs_node_t *node, ocs_io_t *io, uint32_t lun, void *cdb, uint32_t cdb_len, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint32_t wire_len, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Initiate initiator read IO. More...
 
int32_t ocs_scsi_send_wr_io (ocs_node_t *node, ocs_io_t *io, uint32_t lun, void *cdb, uint32_t cdb_len, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint32_t wire_len, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Initiate initiator write IO. More...
 
int32_t ocs_scsi_send_wr_io_first_burst (ocs_node_t *node, ocs_io_t *io, uint32_t lun, void *cdb, uint32_t cdb_len, ocs_scsi_dif_info_t *dif_info, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint32_t wire_len, uint32_t first_burst, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Initiate initiator write IO. More...
 
int32_t ocs_scsi_send_nodata_io (ocs_node_t *node, ocs_io_t *io, uint32_t lun, void *cdb, uint32_t cdb_len, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Initiate initiator SCSI command with no data. More...
 
int32_t ocs_scsi_send_tmf (ocs_node_t *node, ocs_io_t *io, ocs_io_t *io_to_abort, uint32_t lun, ocs_scsi_tmf_cmd_e tmf, ocs_scsi_sgl_t *sgl, uint32_t sgl_count, uint32_t len, ocs_scsi_rsp_io_cb_t cb, void *arg)
 Initiate initiator task management operation. More...
 
uint32_t ocs_scsi_get_property (ocs_t *ocs, ocs_scsi_property_e prop)
 Return SCSI API integer valued property. More...
 
void * ocs_scsi_get_property_ptr (ocs_t *ocs, ocs_scsi_property_e prop)
 Return a property pointer. More...
 
void ocs_scsi_del_initiator_complete (ocs_node_t *node)
 Notify that delete initiator is complete. More...
 
void ocs_scsi_del_target_complete (ocs_node_t *node)
 Notify that delete target is complete. More...
 
void ocs_scsi_update_first_burst_transferred (ocs_io_t *io, uint32_t transferred)
 Update transferred count. More...
 
void ocs_scsi_register_bounce (ocs_t *ocs, void(*fctn)(void(*fctn)(void *arg), void *arg, uint32_t s_id, uint32_t d_id, uint32_t ox_id))
 Register bounce callback for multi-threading. More...
 

Macro Details

#define enable_treceive_auto_resp (   ocs)    ((ocs->ctrlmask & OCS_CTRLMASK_XPORT_DISABLE_AUTORSP_TRECEIVE) == 0)

Definition at line 57 of file ocs_scsi.c.

#define enable_tsend_auto_resp (   ocs)    ((ocs->ctrlmask & OCS_CTRLMASK_XPORT_DISABLE_AUTORSP_TSEND) == 0)

Definition at line 56 of file ocs_scsi.c.

#define scsi_io_printf (   io,
  fmt,
  ... 
)
Value:
ocs_log_info(io->ocs, "[%s]" SCSI_IOFMT fmt, \
io->node->display_name, SCSI_IOFMT_ARGS(io), ##__VA_ARGS__)
#define SCSI_IOFMT
Definition: ocs_scsi.c:51
#define SCSI_IOFMT_ARGS(io)
Definition: ocs_scsi.c:54
const char const char * fmt
Definition: ocs_ddump.h:54

Definition at line 59 of file ocs_scsi.c.

#define scsi_io_trace (   io,
  fmt,
  ... 
)
Value:
do { \
scsi_io_printf(io, fmt, ##__VA_ARGS__); \
} while (0)
#define OCS_LOG_ENABLE_SCSI_TRACE(ocs)
Definition: ocs_debug.h:72
#define scsi_io_printf(io, fmt,...)
Definition: ocs_scsi.c:59
const char const char * fmt
Definition: ocs_ddump.h:54

Definition at line 62 of file ocs_scsi.c.

#define SCSI_IOFMT   "[%04x][i:%0*x t:%0*x h:%04x]"

Definition at line 51 of file ocs_scsi.c.

#define SCSI_IOFMT_ARGS (   io)    io->instance_index, SCSI_ITT_SIZE(io->ocs), io->init_task_tag, SCSI_ITT_SIZE(io->ocs), io->tgt_task_tag, io->hw_tag

Definition at line 54 of file ocs_scsi.c.

#define SCSI_ITT_SIZE (   ocs)    ((ocs->ocs_xport == OCS_XPORT_FC) ? 4 : 8)

Definition at line 52 of file ocs_scsi.c.

#define scsi_log (   ocs,
  fmt,
  ... 
)
Value:
do { \
ocs_log_info(ocs, fmt, ##__VA_ARGS__); \
} while (0)
#define OCS_LOG_ENABLE_SCSI_TRACE(ocs)
Definition: ocs_debug.h:72
const char const char * fmt
Definition: ocs_ddump.h:54

Definition at line 68 of file ocs_scsi.c.

Function Details

static void ocs_initiator_io_cb ( ocs_hal_io_t *  hio,
ocs_remote_node_t *  rnode,
uint32_t  length,
int32_t  status,
uint32_t  ext_status,
void *  app 
)
static

Handle initiator IO completion.

Description
This callback is made upon completion of an initiator operation (initiator read/write command).
Parameters
hioHAL IO context.
rnodeRemote node.
lengthLength of completion data.
statusCompletion status.
ext_statusExtended completion status.
appApplication-specified callback data.
Returns
None.

Definition at line 2190 of file ocs_scsi.c.

static int32_t ocs_scsi_build_sgls ( ocs_hal_t *  hal,
ocs_hal_io_t *  hio,
ocs_hal_dif_info_t *  hal_dif,
ocs_scsi_sgl_t *  sgl,
uint32_t  sgl_count,
ocs_hal_io_type_e  type 
)
static

Definition at line 723 of file ocs_scsi.c.

void ocs_scsi_check_pending ( ocs_t *  ocs)

Check for pending IOs to dispatch.

Description
If there are IOs on the pending list, and a HAL IO is available, then dispatch the IOs.
Parameters
ocsPointer to the OCS structure.
Returns
None.

Definition at line 1032 of file ocs_scsi.c.

static int32_t ocs_scsi_check_pending_async_cb ( ocs_hal_t *  hal,
int32_t  status,
uint8_t *  mqe,
void *  arg 
)
static

Check pending error asynchronous callback function.

Description
Invoke the HAL callback function for a given IO. This function is called from the NOP mailbox completion context.
Parameters
halPointer to HAL object.
statusCompletion status.
mqeMailbox completion queue entry.
argGeneral purpose argument.
Returns
Returns 0.

Definition at line 1004 of file ocs_scsi.c.

static uint32_t ocs_scsi_count_sgls ( ocs_hal_dif_info_t *  hal_dif,
ocs_scsi_sgl_t *  sgl,
uint32_t  sgl_count 
)
static

Return count of SGE's required for request.

Description
An accurate count of SGEs is computed and returned.
Parameters
hal_difPointer to HAL dif information.
sglPointer to SGL from back end.
sgl_countCount of SGEs in SGL.
Returns
Count of SGEs.

Definition at line 695 of file ocs_scsi.c.

static uint32_t ocs_scsi_dif_check_app_tag ( ocs_t *  ocs,
ocs_hal_dif_info_t *  dif_info,
uint16_t  exp_app_tag,
ocs_dif_t *  dif 
)
static

Check the app tag of dif data.

Description
Using the dif_info for the transfer, check the app tag.
Parameters
ocsPointer to the ocs structure for logging.
dif_infoPointer to HAL DIF info data.
exp_app_tagThe value the app tag is expected to be.
difPointer to the DIF data block being checked.
Returns
Returns TRUE if app tag check is ok.

Definition at line 641 of file ocs_scsi.c.

static uint32_t ocs_scsi_dif_check_guard ( ocs_hal_dif_info_t *  dif_info,
ocs_scsi_vaddr_len_t  addrlen[],
uint32_t  addrlen_count,
ocs_dif_t *  dif,
int  is_crc 
)
static

Check the block guard of block data.

Description
Using the dif_info for the transfer, check the block guard value.
Parameters
dif_infoPointer to HAL DIF info data.
addrlenArray of address length pairs.
addrlen_countNumber of entries in the addrlen[] array.
difPointer to the DIF data block being checked.
is_crcTrue if guard is using CRC format.
Returns
Returns TRUE if block guard check is ok.

Definition at line 604 of file ocs_scsi.c.

static uint32_t ocs_scsi_dif_check_ref_tag ( ocs_t *  ocs,
ocs_hal_dif_info_t *  dif_info,
uint32_t  exp_ref_tag,
ocs_dif_t *  dif 
)
static

Check the ref tag of dif data.

Description
Using the dif_info for the transfer, check the app tag.
Parameters
ocsPointer to the ocs structure for logging.
dif_infoPointer to HAL DIF info data.
exp_ref_tagThe value the ref tag is expected to be.
difPointer to the DIF data block being checked.
Returns
Returns TRUE if ref tag check is ok.

Definition at line 667 of file ocs_scsi.c.

static ocs_scsi_io_status_e ocs_scsi_dif_check_unknown ( ocs_io_t *  io,
uint32_t  length,
uint32_t  check_length,
int  is_crc 
)
static

Check a block and DIF data, computing the appropriate SCSI status.

Description
This function is used to check blocks and DIF when given an unknown DIF status using the following logic:

Given the address of the last good block, and a length of bytes that includes the block with the DIF error, find the bad block. If a block is found with an app_tag or ref_tag error, then return the appropriate error. No block is expected to have a block guard error since hardware "fixes" the crc. So if no block in the range of blocks has an error, then it is presumed to be a BLOCK GUARD error.

Parameters
ioPointer to the IO object.
lengthLength of bytes covering the good blocks.
check_lengthLength of bytes that covers the bad block.
is_crcTrue if guard is using CRC format.
Returns
Returns SCSI status.

Definition at line 538 of file ocs_scsi.c.

static int ocs_scsi_dif_guard_is_crc ( uint8_t  direction,
ocs_hal_dif_info_t *  dif_info 
)
static

Determine if an IO is using CRC for DIF guard format.

Parameters
directionIO direction: 1 for write, 0 for read.
dif_infoPointer to HAL DIF info data.
Returns
Returns TRUE if using CRC, FALSE if not.

Definition at line 483 of file ocs_scsi.c.

int32_t ocs_scsi_io_dispatch ( ocs_io_t *  io,
void *  cb 
)

Attempt to dispatch a non-abort IO.

Description
An IO is dispatched:
  • if the pending list is not empty, add IO to pending list and call a function to process the pending list.
  • if pending list is empty, try to allocate a HAL IO. If none is available, place this IO at the tail of the pending IO list.
  • if HAL IO is available, attach this IO to the HAL IO and submit it.
Parameters
ioPointer to IO structure.
cbCallback function.
Returns
Returns 0 on success, a negative error code value on failure.

Definition at line 1162 of file ocs_scsi.c.

int32_t ocs_scsi_io_dispatch_abort ( ocs_io_t *  io,
void *  cb 
)

Attempt to dispatch an Abort IO.

Description
An Abort IO is dispatched:
  • if the pending list is not empty, add IO to pending list and call a function to process the pending list.
  • if pending list is empty, send abort to the HAL.
Parameters
ioPointer to IO structure.
cbCallback function.
Returns
Returns 0 on success, a negative error code value on failure.

Definition at line 1243 of file ocs_scsi.c.

static int32_t ocs_scsi_io_dispatch_hal_io ( ocs_io_t *  io,
ocs_hal_io_t *  hio 
)
static

Dispatch IO.

Description
An IO and its associated HAL IO is dispatched to the HAL.
Parameters
ioPointer to IO structure.
hioPointer to HAL IO structure from which IO will be dispatched.
Returns
Returns 0 on success, a negative error code value on failure.

Definition at line 1288 of file ocs_scsi.c.

static int32_t ocs_scsi_io_dispatch_no_hal_io ( ocs_io_t *  io)
static

Dispatch IO.

Description
An IO that does require a HAL IO is dispatched to the HAL.
Parameters
ioPointer to IO structure.
Returns
Returns 0 on success, or a negative error code value on failure.

Definition at line 1416 of file ocs_scsi.c.

int32_t ocs_scsi_recv_wr_data ( ocs_io_t *  io,
uint32_t  flags,
ocs_scsi_dif_info_t *  dif_info,
ocs_scsi_sgl_t *  sgl,
uint32_t  sgl_count,
uint64_t  len,
ocs_scsi_io_cb_t  cb,
void *  arg 
)

Definition at line 1639 of file ocs_scsi.c.

void ocs_scsi_register_bounce ( ocs_t *  ocs,
void(*)(void(*fctn)(void *arg), void *arg, uint32_t s_id, uint32_t d_id, uint32_t ox_id)  fctn 
)

Register bounce callback for multi-threading.

Description
Register the back end bounce function.
Parameters
ocsPointer to device object.
fctnFunction pointer of bounce function.
Returns
None.

Definition at line 3023 of file ocs_scsi.c.

int32_t ocs_scsi_send_rd_data ( ocs_io_t *  io,
uint32_t  flags,
ocs_scsi_dif_info_t *  dif_info,
ocs_scsi_sgl_t *  sgl,
uint32_t  sgl_count,
uint64_t  len,
ocs_scsi_io_cb_t  cb,
void *  arg 
)

Definition at line 1629 of file ocs_scsi.c.

void ocs_scsi_update_first_burst_transferred ( ocs_io_t *  io,
uint32_t  transferred 
)

Update transferred count.

Description
Updates io->transferred, as required when using first burst, when the amount of first burst data processed differs from the amount of first burst data received.
Parameters
ioPointer to the io object.
transferredNumber of bytes transferred out of first burst buffers.
Returns
None.

Definition at line 3006 of file ocs_scsi.c.

static int32_t ocs_target_abort_cb ( ocs_hal_io_t *  hio,
ocs_remote_node_t *  rnode,
uint32_t  length,
int32_t  status,
uint32_t  ext_status,
void *  app 
)
static

Process target abort callback.

Description
Accepts HAL abort requests.
Parameters
hioHAL IO context.
rnodeRemote node.
lengthLength of response data.
statusCompletion status.
ext_statusExtended completion status.
appApplication-specified callback data.
Returns
Returns 0 on success, or a negative error code value on failure.

Definition at line 1915 of file ocs_scsi.c.

static int32_t ocs_target_bls_resp_cb ( ocs_hal_io_t *  hio,
ocs_remote_node_t *  rnode,
uint32_t  length,
int32_t  status,
uint32_t  ext_status,
void *  app 
)
static

Process target BLS response callback.

Description
Accepts HAL abort requests.
Parameters
hioHAL IO context.
rnodeRemote node.
lengthLength of response data.
statusCompletion status.
ext_statusExtended completion status.
appApplication-specified callback data.
Returns
Returns 0 on success, or a negative error code value on failure.

Definition at line 2062 of file ocs_scsi.c.

static void ocs_target_io_cb ( ocs_hal_io_t *  hio,
ocs_remote_node_t *  rnode,
uint32_t  length,
int32_t  status,
uint32_t  ext_status,
void *  app 
)
static

Target response completion callback.

Description
Function is called upon the completion of a target IO request.
Parameters
hioPointer to the HAL IO structure.
rnodeRemote node associated with the IO that is completing.
lengthLength of the response payload.
statusCompletion status.
ext_statusExtended completion status.
appApplication-specific data (generally a pointer to the IO context).
Returns
None.

Definition at line 350 of file ocs_scsi.c.

static int32_t ocs_target_send_bls_resp ( ocs_io_t *  io,
ocs_scsi_io_cb_t  cb,
void *  arg 
)
static

Complete abort request.

Description
An abort request is completed by posting a BA_ACC for the IO that requested the abort.
Parameters
ioPointer to the IO context.
cbCallback function to invoke upon completion.
argApplication-specified completion callback argument.
Returns
Returns 0 on success, or a negative error code value on failure.

Definition at line 2110 of file ocs_scsi.c.