Minor fixes and cleanups

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@862 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Vladislav Bolkhovitin
2009-05-19 17:56:25 +00:00
parent 5347e3f509
commit cf327b8009
3 changed files with 41 additions and 23 deletions

View File

@@ -1224,6 +1224,7 @@ void scst_nexus_loss(struct scst_tgt_dev *tgt_dev, bool queue_UA)
/* With activity suspended the lock isn't needed, but let's be safe */
spin_lock_bh(&tgt_dev->tgt_dev_lock);
scst_free_all_UA(tgt_dev);
memset(tgt_dev->tgt_dev_sense, 0, sizeof(tgt_dev->tgt_dev_sense));
spin_unlock_bh(&tgt_dev->tgt_dev_lock);
if (queue_UA) {
@@ -3426,7 +3427,12 @@ void scst_process_reset(struct scst_device *dev,
struct scst_session *sess = tgt_dev->sess;
spin_lock_bh(&tgt_dev->tgt_dev_lock);
scst_free_all_UA(tgt_dev);
memset(tgt_dev->tgt_dev_sense, 0,
sizeof(tgt_dev->tgt_dev_sense));
spin_unlock_bh(&tgt_dev->tgt_dev_lock);
spin_lock_irq(&sess->sess_list_lock);
@@ -4158,6 +4164,37 @@ out:
return;
}
void scst_store_sense(struct scst_cmd *cmd)
{
TRACE_ENTRY();
if (SCST_SENSE_VALID(cmd->sense) &&
!test_bit(SCST_CMD_NO_RESP, &cmd->cmd_flags) &&
(cmd->tgt_dev != NULL)) {
struct scst_tgt_dev *tgt_dev = cmd->tgt_dev;
TRACE_DBG("Storing sense (cmd %p)", cmd);
spin_lock_bh(&tgt_dev->tgt_dev_lock);
if (cmd->sense_bufflen <= sizeof(tgt_dev->tgt_dev_sense))
tgt_dev->tgt_dev_valid_sense_len = cmd->sense_bufflen;
else {
tgt_dev->tgt_dev_valid_sense_len = sizeof(tgt_dev->tgt_dev_sense);
PRINT_ERROR("Stored sense truncated to size %d "
"(needed %d)", tgt_dev->tgt_dev_valid_sense_len,
cmd->sense_bufflen);
}
memcpy(tgt_dev->tgt_dev_sense, cmd->sense,
tgt_dev->tgt_dev_valid_sense_len);
spin_unlock_bh(&tgt_dev->tgt_dev_lock);
}
TRACE_EXIT();
return;
}
void scst_xmit_process_aborted_cmd(struct scst_cmd *cmd)
{
TRACE_ENTRY();

View File

@@ -303,6 +303,8 @@ int scst_acg_remove_name(struct scst_acg *acg, const char *name);
int scst_prepare_request_sense(struct scst_cmd *orig_cmd);
int scst_finish_internal_cmd(struct scst_cmd *cmd);
void scst_store_sense(struct scst_cmd *cmd);
int scst_assign_dev_handler(struct scst_device *dev,
struct scst_dev_type *handler);

View File

@@ -2922,29 +2922,8 @@ static int scst_pre_xmit_response(struct scst_cmd *cmd)
if (unlikely(test_bit(SCST_CMD_ABORTED, &cmd->cmd_flags)))
scst_xmit_process_aborted_cmd(cmd);
else if (unlikely(cmd->status == SAM_STAT_CHECK_CONDITION) &&
SCST_SENSE_VALID(cmd->sense) &&
!test_bit(SCST_CMD_NO_RESP, &cmd->cmd_flags) &&
(cmd->tgt_dev != NULL)) {
struct scst_tgt_dev *tgt_dev = cmd->tgt_dev;
TRACE_DBG("Storing sense (cmd %p)", cmd);
spin_lock_bh(&tgt_dev->tgt_dev_lock);
if (cmd->sense_bufflen <= sizeof(tgt_dev->tgt_dev_sense))
tgt_dev->tgt_dev_valid_sense_len = cmd->sense_bufflen;
else {
tgt_dev->tgt_dev_valid_sense_len = sizeof(tgt_dev->tgt_dev_sense);
PRINT_ERROR("Stored sense truncated to size %d "
"(needed %d)", tgt_dev->tgt_dev_valid_sense_len,
cmd->sense_bufflen);
}
memcpy(tgt_dev->tgt_dev_sense, cmd->sense,
tgt_dev->tgt_dev_valid_sense_len);
spin_unlock_bh(&tgt_dev->tgt_dev_lock);
}
else if (unlikely(cmd->status == SAM_STAT_CHECK_CONDITION))
scst_store_sense(cmd);
if (unlikely(test_bit(SCST_CMD_NO_RESP, &cmd->cmd_flags))) {
TRACE_MGMT_DBG("Flag NO_RESP set for cmd %p (tag %llu),"