- 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:
Vladislav Bolkhovitin
2006-11-03 17:41:16 +00:00
parent 40d6dbbe6c
commit 0efcd3d65f
4 changed files with 16 additions and 23 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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 "