Commit Graph

196 Commits

Author SHA1 Message Date
Bart Van Assche
0b3861da48 Added a blank line.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1483 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-29 19:09:06 +00:00
Bart Van Assche
421dbafa7c Changes:
- 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
2010-01-17 13:07:46 +00:00
Bart Van Assche
5ce3870372 Updated test instructions.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1472 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-16 19:38:08 +00:00
Bart Van Assche
e3d9724359 Updated copyright statement.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1471 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-16 19:36:29 +00:00
Bart Van Assche
c654261e03 Changes:
- Updated copyright statement.
- Micro-optimized the function srpt_req_lim_delta().
- Made sure that SRPT does not cause a lockup in (at least) the Linux SRP
  initiator. See also http://bugzilla.kernel.org/show_bug.cgi?id=14235.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1470 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-14 20:35:37 +00:00
Bart Van Assche
ee0767206c Removed SRP_CRED_REQ support again.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1464 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-13 20:19:54 +00:00
Bart Van Assche
2610bf1d0a Fixed a race condition (use-after-free) that could trigger a kernel bug report during module unloading.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1451 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-12 08:52:08 +00:00
Bart Van Assche
b85002b263 Made sure that if a work completion reports an error status that
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
2010-01-11 19:00:03 +00:00
Bart Van Assche
530ecf06c2 Converted a WARN_ON() into a PRINT_ERROR() statement.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1445 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-11 18:41:55 +00:00
Bart Van Assche
661ecd52d2 Close IB channel after session unregistration instead of before in order
to prevent the following errors to occur:
ib_srpt: srpt_completion:1737:***ERROR***: failed sending response status= 4
ib_srpt: srpt_completion:1737:***ERROR***: failed sending response status= 5


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1444 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-11 11:30:08 +00:00
Bart Van Assche
0cd53b65ef Made sure that the pre-cflags patches are uniform to the other in-tree kernel
patches, i.e. that -p1 has to be used to apply these patches.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1443 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-10 13:16:28 +00:00
Bart Van Assche
048a338747 Backported some 2.6.32 IB bug fixes to the 2.6.30 kernel.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1442 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-10 13:14:28 +00:00
Bart Van Assche
5cc522712e Fixed the following race conditions:
- 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
2010-01-09 20:14:13 +00:00
Bart Van Assche
7bf99a3584 Removed some TRACE_ENTRY() / TRACE_EXIT() statements.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1434 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-06 20:47:08 +00:00
Bart Van Assche
ca9004962d Changes:
- 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
2010-01-06 20:11:24 +00:00
Bart Van Assche
6a523b3c13 Added more debugging code.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1430 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-04 20:56:00 +00:00
Bart Van Assche
45c93135f8 Changes:
- 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
2010-01-04 20:26:19 +00:00
Bart Van Assche
af086e27a8 Merged two lines.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1428 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-04 20:13:04 +00:00
Bart Van Assche
388c38bfd9 Fixed typos.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1426 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-03 08:34:21 +00:00
Bart Van Assche
a8a72c1b51 Fixed sporadic lockup triggered by removing the ib_srpt kernel module.
The following complaint was logged by the kernel when this happened:

INFO: task rmmod:26637 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
rmmod         D 00000000ffffffff     0 26637  26629
 ffff88009ce9dbd8 0000000000000046 ffff88009ce9dbf8 ffffffff8052466e
 0000000000000000 0000000000000001 0000000000000001 0000000000000001
 ffff88003c24d070 00000000001d17c0 000000000000c8a0 ffff88003c24d078
Call Trace:
 [<ffffffff8052466e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
 [<ffffffff80522408>] schedule+0x18/0x40
 [<ffffffff805227a5>] schedule_timeout+0x165/0x1a0
 [<ffffffff80525320>] ? _spin_unlock_irq+0x30/0x60
 [<ffffffff8023f4d9>] ? sub_preempt_count+0xa9/0xe0
 [<ffffffff80521756>] wait_for_common+0x116/0x1a0
 [<ffffffff80248850>] ? default_wake_function+0x0/0x20
 [<ffffffff8052189d>] wait_for_completion+0x1d/0x20
 [<ffffffffa06983e1>] scst_unregister_session+0x101/0x240 [scst]
 [<ffffffffa070f52f>] srpt_release+0xef/0x1e0 [ib_srpt]
 [<ffffffff805252d5>] ? _spin_unlock_irqrestore+0x65/0x80
 [<ffffffffa0693f60>] scst_unregister+0x70/0x380 [scst]
 [<ffffffff805252b2>] ? _spin_unlock_irqrestore+0x42/0x80
 [<ffffffffa0711982>] srpt_remove_one+0xa2/0x190 [ib_srpt]
 [<ffffffffa03b3105>] ib_unregister_client+0x65/0x120 [ib_core]
 [<ffffffff8027a02d>] ? trace_hardirqs_on+0xd/0x10
 [<ffffffffa0715114>] srpt_cleanup_module+0x70/0xd4 [ib_srpt]
 [<ffffffff80284f87>] sys_delete_module+0x1a7/0x270
 [<ffffffff8020cc6d>] ? retint_swapgs+0xe/0x13
 [<ffffffff80279e79>] ? trace_hardirqs_on_caller+0x29/0x1d0
 [<ffffffff8052466e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
 [<ffffffff8020c21b>] system_call_fastpath+0x16/0x1b
INFO: lockdep is turned off.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1425 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-02 13:56:12 +00:00
Bart Van Assche
d124f1cc8e Changes:
- 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
2010-01-02 12:27:32 +00:00
Bart Van Assche
e1de778c3a Changes related to credit-based SRP buffer management:
- 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
2010-01-01 17:48:07 +00:00
Bart Van Assche
0d4ba05ae8 Added and commented out the following statement:
EXTRA_CFLAGS += -DCONFIG_SCST_EXTRACHECKS


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1422 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2010-01-01 17:06:38 +00:00
Bart Van Assche
d1e5f40622 Changes:
- 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
2009-12-28 19:31:51 +00:00
Bart Van Assche
cea7193e0f Updated to do list.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1417 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-26 09:23:39 +00:00
Bart Van Assche
2fbe389419 Behavior changes:
- 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
2009-12-25 15:26:42 +00:00
Bart Van Assche
50c6585066 Made sure that all log lines generated by the ib_srpt kernel module
have an "ib_srpt: " prefix. Thanks to Stanley Sufficool for the patch.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1409 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-18 19:11:24 +00:00
Bart Van Assche
6ed8923406 Spelling fix.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1390 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-13 18:02:39 +00:00
Bart Van Assche
50dc64fd1c Updated SRPT documentation.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1389 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-13 18:01:14 +00:00
Bart Van Assche
9e72c9bade Bug fix: SRQ availability counter is no longer decremented when ib_post_send() fails.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1388 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-13 17:59:44 +00:00
Bart Van Assche
a03c2176a8 Added an additional consistency check: an error message is now printed if
the kernel-ib-devel RPM has been installed but not the kernel-ib RPM.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1387 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-13 13:00:39 +00:00
Bart Van Assche
345cd34aae Whitespace-only change: fixed a checkpatch complaint.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1386 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-09 12:03:35 +00:00
Bart Van Assche
ca81d05dd7 Update: the __same_type() macro has been introduced in kernel version 2.6.31, not in 2.6.30.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1383 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-07 08:51:58 +00:00
Bart Van Assche
e4b93a83c0 - Fixed a checkpatch complaint.
- 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
2009-12-07 08:07:58 +00:00
Bart Van Assche
6a9b203dd2 FMR only applies to the SRP initiator, not to the SRP target.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1381 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-07 07:21:39 +00:00
Bart Van Assche
799820d44b - Simplified error handling in srpt_get_desc_tbl(): incorrect indirect
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
2009-12-06 19:00:25 +00:00
Bart Van Assche
ffb2fb1f11 Updated SRPT documentation.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1379 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-06 12:44:47 +00:00
Bart Van Assche
001d47266c Updated to do list.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1378 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-06 12:37:21 +00:00
Bart Van Assche
0486e8404c - Moved two constants from ib_srpt.c to ib_srpt.h.
- 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
2009-12-05 10:10:53 +00:00
Bart Van Assche
7a330f2e09 Should have been included in the previous commit (r1371).
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1372 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-30 10:59:40 +00:00
Bart Van Assche
b371630185 Avoid dangling pointer dereferences by resetting ioctx->scmnd in srpt_on_free_cmd().
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1371 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-30 09:51:17 +00:00
Bart Van Assche
7cdcbc8c69 Cleanup:
- 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
2009-11-28 18:40:15 +00:00
Bart Van Assche
418e7fb3d6 - Split srpt_find_channel into two functions: srpt_find_channel() and
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
2009-11-28 17:20:22 +00:00
Bart Van Assche
ec2e199060 Bug fixes (some introduced in the previous revision, some long-standing):
- 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
2009-11-28 16:36:53 +00:00
Bart Van Assche
f50ce17866 Bug fixes:
- 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
2009-11-28 14:03:55 +00:00
Bart Van Assche
e6f5aa8865 Changes:
- 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
2009-11-27 17:52:47 +00:00
Bart Van Assche
1065e2d317 Log sense data truncation when debugging is enabled.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1362 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-27 12:10:59 +00:00
Bart Van Assche
10530125a5 Whitespace-only change.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1354 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-23 08:40:51 +00:00
Bart Van Assche
495257b44e - Added counter that keeps track of the number of work requests posted on
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
2009-11-22 18:42:35 +00:00
Bart Van Assche
b9402438ff Updated to do list once more.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1346 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-18 07:22:30 +00:00