git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5478 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Vladislav Bolkhovitin
2014-04-24 23:44:25 +00:00
parent 40161eeb10
commit 13ec92196f
3 changed files with 13 additions and 12 deletions
+2 -2
View File
@@ -2078,8 +2078,8 @@ struct scst_cmd {
unsigned long start_time;
/* List entry for tgt_dev's SN related lists */
struct list_head sn_cmd_list_entry;
/* List entry for tgt_dev's deferred (SN, etc.) lists */
struct list_head deferred_cmd_list_entry;
/* Cmd's serial number, used to execute cmd's in order of arrival */
unsigned int sn;
+8 -7
View File
@@ -8430,7 +8430,7 @@ struct scst_cmd *__scst_check_deferred_commands_locked(
restart:
list_for_each_entry_safe(cmd, t, &order_data->deferred_cmd_list,
sn_cmd_list_entry) {
deferred_cmd_list_entry) {
EXTRACHECKS_BUG_ON((cmd->queue_type != SCST_CMD_QUEUE_SIMPLE) &&
(cmd->queue_type != SCST_CMD_QUEUE_ORDERED));
if (cmd->sn == expected_sn) {
@@ -8440,7 +8440,7 @@ restart:
cmd, cmd->sn, cmd->sn_set);
order_data->def_cmd_count--;
list_del(&cmd->sn_cmd_list_entry);
list_del(&cmd->deferred_cmd_list_entry);
if (activate) {
spin_lock(&cmd->cmd_threads->cmd_list_lock);
@@ -8472,18 +8472,19 @@ restart:
goto out;
list_for_each_entry(cmd, &order_data->skipped_sn_list,
sn_cmd_list_entry) {
deferred_cmd_list_entry) {
EXTRACHECKS_BUG_ON(cmd->queue_type == SCST_CMD_QUEUE_HEAD_OF_QUEUE);
if (cmd->sn == expected_sn) {
/*
* !! At this point any pointer in cmd, except !!
* !! cur_order_data, sn_slot and sn_cmd_list_entry, !!
* !! could be already destroyed! !!
* !! cur_order_data, sn_slot and !!
* !! deferred_cmd_list_entry, could be already !!
* !! destroyed! !!
*/
TRACE_SN("cmd %p (tag %llu) with skipped sn %d found",
cmd, (long long unsigned int)cmd->tag, cmd->sn);
order_data->def_cmd_count--;
list_del(&cmd->sn_cmd_list_entry);
list_del(&cmd->deferred_cmd_list_entry);
spin_unlock_irq(&order_data->sn_lock);
scst_inc_expected_sn(cmd);
if (test_and_set_bit(SCST_CMD_CAN_BE_DESTROYED,
@@ -8534,7 +8535,7 @@ void scst_unblock_deferred(struct scst_order_data *order_data,
out_of_sn_cmd->out_of_sn = 1;
spin_lock_irq(&order_data->sn_lock);
order_data->def_cmd_count++;
list_add_tail(&out_of_sn_cmd->sn_cmd_list_entry,
list_add_tail(&out_of_sn_cmd->deferred_cmd_list_entry,
&order_data->skipped_sn_list);
TRACE_SN("out_of_sn_cmd %p with sn %d added to skipped_sn_list"
" (expected_sn %d)", out_of_sn_cmd, out_of_sn_cmd->sn,
+3 -3
View File
@@ -3334,7 +3334,7 @@ static int scst_exec_check_sn(struct scst_cmd **active_cmd)
TRACE_SN("Deferring cmd %p (sn=%d, set %d, "
"expected_sn=%d)", cmd, cmd->sn,
cmd->sn_set, expected_sn);
list_add_tail(&cmd->sn_cmd_list_entry,
list_add_tail(&cmd->deferred_cmd_list_entry,
&order_data->deferred_cmd_list);
res = SCST_CMD_STATE_RES_CONT_NEXT;
}
@@ -5515,7 +5515,7 @@ void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
spin_lock(&order_data->sn_lock);
list_for_each_entry_safe(cmd, tcmd,
&order_data->deferred_cmd_list,
sn_cmd_list_entry) {
deferred_cmd_list_entry) {
if ((tgt != NULL) && (tgt != cmd->tgt))
continue;
@@ -5523,7 +5523,7 @@ void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
continue;
if (__scst_check_unblock_aborted_cmd(cmd,
&cmd->sn_cmd_list_entry)) {
&cmd->deferred_cmd_list_entry)) {
TRACE_MGMT_DBG("Unblocked aborted SN "
"cmd %p (sn %u)", cmd, cmd->sn);
order_data->def_cmd_count--;