- The entire receive queue can be used again instead of only SRPT_RQ_SIZE - 1
elements (as in r1470).
- Added initiator-lockup-avoidance code to SRP_TSK_MGMT processing code too.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1473 d57e44dd-8a1f-0410-8b47-8ef2f437770f
completion queue processing is not aborted but that the remaining
completion queue entries are processed.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1446 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- With thread=1, the kernel thread was stopped before all I/O was stopped.
This could result in IB completions for responses sent to the initiator
not being processed, scst_tgt_cmd_done() not being called for certain
SCST commands and hence this race could cause "rmmod ib_srpt" to hang.
- ib_unregister_event_handler() was called after cancel_work_sync(). This
could cause srpt_event_handler() to queue new work, work that could be
executed after the data it operates on had been deallocated.
Change: simplified module unloading by calling ib_destroy_cm_id(sdev->cm_id)
before calling scst_unregister(). This made the variable "cleaning_up"
superfluous.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1441 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- srpt_release_channel_by_cmid(): the sdev->spinlock and scst_mgmt_lock are
no longer locked nested.
- srpt_find_channel(): does now return NULL when the channel is not found
(which never happens).
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1432 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Removed references to SCST core internal state names.
- Does no longer accept new connections while unloading.
- Module unloading should now really no longer cause a hang.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1429 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Decreased number of target-to-initiator request send buffers from two
to one such that a clear error message can be printed when the SRP
initiator did not respond to the SRP_CRED_REQ information unit.
- Bug fix: don't modify ch->last_response_req_lim when sending an SRP
information unit that contains the REQUEST LIMIT DELTA field failed.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1424 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Bug fix: don't set the REQUEST LIMIT DELTA field to SRPT_RQ_SIZE when
sending the first reponse to the initiator but to the proper value
(a small integer).
- An SRP_CRED_REQ information unit is now sent to the initiator if the
number of I/O contexts available for receiving dropped below two I/O
contexts (see also the SRP standard for more information). This change
is required to fix the SRP initiator lockup that happens when the
initiator sends requests faster than the target can process them. In
order to fix the lockup, it is also necessary to implement SRP_CRED_REQ
support in the SRP initiator in the vanilla Linux kernel and in OFED.
Neither kernel version 2.6.32 nor OFED 1.5 nor any previous
version of these components supports SRP_CRED_REQ information units.
See also http://bugzilla.kernel.org/show_bug.cgi?id=14235 for more
information about the initiator lockup.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1423 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Convert sense data to/from fixed format / descriptor format before
sending back a response.
- Print an error message to the kernel log when an unsupported IB event
has been received.
- Return the SCSI status BUSY instead of CHECK CONDITION when allocating
an SCST command failed (until r1409, the SCSI status in the SRP_RSP
information unit was set to TASK SET FULL in this case).
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1419 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Fixed: the SCSOLNT and UCSOLNT bits were ignored in received SRP requests,
and the SOLNT bit was not set in responses when required. This is required
by the SRP protocol specification.
- Fixed: SRP_RSP messages must be limited to the MAXIMUM TARGET TO INITIATOR
IU LENGTH field indicated in the SRP_LOGIN_RSP response instead of the
maximum message size supported by SRPT. This is also required by the SRP
protocol specification.
- Fixed: the STATUS field of response messages with status GOOD and that
contain sense data is no longer modified into CHECK CONDITION.
Internal changes (refactoring):
- Replaced the SCSI sense data handling data structures and code in SRPT by
those of the SCST core.
- Moved the code for building an error response from srpt_handle_cmd() and
srpt_handle_tsk_mgmt() to srpt_handle_new_iu().
- Removed the ioctx::data_len member.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1416 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Made sure that the SRPT source code compiles again on systems with a 2.6.29
or older kernel.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1382 d57e44dd-8a1f-0410-8b47-8ef2f437770f
descriptors are now reported by returning -EINVAL instead of setting the
third argument to true. Removed the third argument of this function.
- Added support for SRP_CMD requests with non-zero ADDITIONAL CDB LENGTH.
Note: support for these requests has not yet been tested -- I do not know
of any SRP initiator that generates such requests.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1380 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Changed default value of srp_max_message_size from 4096 to 2116. This
size corresponds to the size of an SRP_CMD request message containing
an indirect buffer list with 128 elements.
- A warning is now printed when an SRP_CMD request is received containing
more than one CDB -- this kind of messages is not yet supported.
- Switched back from multiple ib_dma_sync_single_for_cpu() calls to a
single call because the latter results in better performance.
- An error message is now printed if a corrupt SRP_CMD request has been
received. Before these were ignored silently.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1377 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Removed a spinlock that became superfluous.
- Fixed checkpatch and sparse complaints.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1370 d57e44dd-8a1f-0410-8b47-8ef2f437770f
srpt_release_channel_by_cmid().
- Removed tracing statements from srpt_unmap_sg_to_ib_sge() because this
function is now invoked while performing I/O.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1369 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Fixed system lockup triggered by "rmmod ib_srpt" while the SRP was writing
data. This lockup occurred because srpt_reset_ioctx() was not resetting
the pointers to the memory it freed, which indirectly triggered a kernel
oops in the IB interrupt handler.
- Fixed BUG() during "rmmod ib_srpt" triggered by calling scst_rx_cmd()
after scst_unregister_session(). This has been fixed by making sure that
the channel state is set to RDMA_CHANNEL_DISCONNECTING before calling
scst_unregister_session().
Performance improvements:
- Simplified cmd_wait_list manipulation code.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1368 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- Fixed races on srpt_ioctx::state manipulation by declaring this variable
atomic.
- Fixed races on srpt_rdma_ch::state manipulation by declaring this variable
atomic.
- Fixed bug in srpt_abort_scst_cmd(): SRPT_STATE_DATA_IN was not yet handled.
- Fixed races on srpt_rdma_ch::cm_id destruction. Clearly documented which
object owns the cm_id at which time.
Performance improvements:
- Eliminated the list of active commands (active_scmnd_list) because this
list was a duplicated of a list already kept by the SCST core.
- Switched to double-checked locking in srpt_handle_new_iu(). This saves one
spin_lock_irqsave() and one spin_unlock_irqrestore() call in the common
case (that is, a live channel).
- Eliminated RDMA channel state tests in SCST command handling callback
functions -- removed the function srpt_abort_if_disconnecting().
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1367 d57e44dd-8a1f-0410-8b47-8ef2f437770f
- The message that sense data is truncated is now generated via the
PRINT_WARNING() macro instead of TRACE_DBG().
- Cleaned up code for sense data truncation.
- Compiles again on RHEL and CentOS systems.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1363 d57e44dd-8a1f-0410-8b47-8ef2f437770f
the per-channel queue pair. This counter is used to prevent that
ib_post_send() triggers a queue overflow.
- Fixed error handling in srpt_xfer_data(): srpt_unmap_sg_to_ib_sge() is now
called before returning an error code.
- Simplified implementation of the sysfs attribute login_info.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1353 d57e44dd-8a1f-0410-8b47-8ef2f437770f