mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 18:51:27 +00:00
- Fixed double locking regression, introduced rev20
- Small docs update git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@27 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -2,6 +2,8 @@ Summary of changes between versions 0.9.3.8 and 0.9.5
|
||||
-----------------------------------------------------
|
||||
|
||||
- Ported to 2.6.17.x and 2.6.18.
|
||||
|
||||
- Problem with not found WWN on the first login attempt fixed.
|
||||
|
||||
- Updated for the latest SCST interfaces changes.
|
||||
|
||||
|
||||
@@ -24,14 +24,6 @@ Tested on stable kernels from http://www.kernel.org. The original
|
||||
initiator driver was taken from kernel version 2.6.17.8, but it should
|
||||
also work on other versions, including 2.6.18.x and 2.6.16.x.
|
||||
|
||||
NOTE: WWN-based authentification on 2200 cards doesn't always work from
|
||||
---- the first "connect", but works on all subsequent attempts.
|
||||
On this error message "Unable to find wwn login for loop
|
||||
id XX, using loop id instead" is logged. So, just try again, eg
|
||||
unload/load FC card driver on the initiator host. This is the
|
||||
current limitation. Everyone who fix it or found a usable
|
||||
workaround is welcome.
|
||||
|
||||
See also "ToDo" file for list of known issues and unimplemented
|
||||
features.
|
||||
|
||||
@@ -74,9 +66,8 @@ There are the following compilation options, that could be commented
|
||||
in/out in Makefile:
|
||||
|
||||
- FC_SCST_WWN_AUTH - turns on using remote initiator's WWN as
|
||||
authentification name for scst_register_session_ex(). See note above
|
||||
about limitations of this mode. If it is off, LOOP ID used instead of
|
||||
WWN.
|
||||
authentification name for scst_register_session_ex(). If it is off,
|
||||
LOOP ID used instead of WWN.
|
||||
|
||||
- DEBUG_TGT - turns on some debugging code, including some logging. Makes
|
||||
the driver considerably bigger and slower, producing large amount of
|
||||
|
||||
@@ -17,13 +17,11 @@ Known issues and unimplemented features
|
||||
|
||||
- SNS support.
|
||||
|
||||
- Support for sense with length > 26 (is it possible at all?)
|
||||
- Support for sense with length > 26 (is it possible?)
|
||||
|
||||
- Queue types (simple, ordered, etc.) support (needs appropriate support
|
||||
from SCST and Linux kernel)
|
||||
|
||||
- On 2300 if on a tape with block size 0 we write block with size X
|
||||
and then read it with bs <X the tape skips all blocks with size X
|
||||
until the next correct block or filemark found, instead of returning
|
||||
ILI with negative counter. Looks like the initiator retries the
|
||||
command quetly. 2200 works correctly.
|
||||
command quetly. 2200 works correctly. With the latest firmware that
|
||||
might be fixed.
|
||||
|
||||
@@ -94,7 +94,7 @@ static void q2t_ctio_completion(scsi_qla_host_t *ha, uint32_t handle);
|
||||
static void q2t_host_action(scsi_qla_host_t *ha,
|
||||
qla2x_tgt_host_action_t action);
|
||||
static void q2t_send_term_exchange(scsi_qla_host_t *ha, struct q2t_cmd *cmd,
|
||||
atio_entry_t *atio);
|
||||
atio_entry_t *atio, int ha_locked);
|
||||
|
||||
/*
|
||||
* Global Variables
|
||||
@@ -694,7 +694,7 @@ static int q2t_xmit_response(struct scst_cmd *scst_cmd)
|
||||
|
||||
prm.cmd->state = Q2T_STATE_ABORTED;
|
||||
|
||||
q2t_send_term_exchange(ha, prm.cmd, &prm.cmd->atio);
|
||||
q2t_send_term_exchange(ha, prm.cmd, &prm.cmd->atio, 0);
|
||||
/* !! At this point cmd could be already freed !! */
|
||||
goto out;
|
||||
}
|
||||
@@ -880,17 +880,18 @@ out_unlock:
|
||||
}
|
||||
|
||||
static void q2t_send_term_exchange(scsi_qla_host_t *ha, struct q2t_cmd *cmd,
|
||||
atio_entry_t *atio)
|
||||
atio_entry_t *atio, int ha_locked)
|
||||
{
|
||||
ctio_ret_entry_t *ctio;
|
||||
unsigned long flags;
|
||||
unsigned long flags = 0;
|
||||
int do_tgt_cmd_done = 0;
|
||||
|
||||
TRACE_ENTRY();
|
||||
|
||||
TRACE_DBG("Sending TERM EXCH CTIO (ha=%p)", ha);
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (!ha_locked)
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
|
||||
/* Send marker if required */
|
||||
if (tgt_data.issue_marker(ha) != QLA_SUCCESS) {
|
||||
@@ -934,7 +935,8 @@ static void q2t_send_term_exchange(scsi_qla_host_t *ha, struct q2t_cmd *cmd,
|
||||
q2t_exec_queue(ha);
|
||||
|
||||
out_unlock:
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
if (!ha_locked)
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
if (do_tgt_cmd_done) {
|
||||
msleep(250);
|
||||
@@ -1742,7 +1744,7 @@ static void q2t_response_pkt(scsi_qla_host_t *ha, sts_entry_t *pkt)
|
||||
rc = q2t_send_cmd_to_scst(ha, atio);
|
||||
if (unlikely(rc != 0)) {
|
||||
if (rc == -ESRCH) {
|
||||
q2t_send_term_exchange(ha, NULL, atio);
|
||||
q2t_send_term_exchange(ha, NULL, atio, 1);
|
||||
} else {
|
||||
PRINT_INFO("qla2x00tgt(%ld): Unable to "
|
||||
"send the command to SCSI target "
|
||||
|
||||
Reference in New Issue
Block a user