mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-18 11:11:27 +00:00
Merge r7496 from trunk
git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/3.3.x@7744 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -13050,7 +13050,7 @@ void scst_dev_check_set_UA(struct scst_device *dev,
|
||||
scst_res_unlock(dev, &lksb);
|
||||
|
||||
if (rc)
|
||||
scst_unblock_aborted_cmds(NULL, NULL, dev, false);
|
||||
scst_unblock_aborted_cmds(NULL, NULL, dev);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -13724,7 +13724,7 @@ static void scst_process_qerr(struct scst_cmd *cmd)
|
||||
spin_unlock_bh(&dev->dev_lock);
|
||||
|
||||
if (unblock)
|
||||
scst_unblock_aborted_cmds(cmd->tgt, cmd->sess, dev, false);
|
||||
scst_unblock_aborted_cmds(cmd->tgt, cmd->sess, dev);
|
||||
|
||||
TRACE_EXIT();
|
||||
return;
|
||||
|
||||
@@ -724,9 +724,10 @@ void scst_abort_cmd(struct scst_cmd *cmd, struct scst_mgmt_cmd *mcmd,
|
||||
void scst_process_reset(struct scst_device *dev,
|
||||
struct scst_session *originator, struct scst_cmd *exclude_cmd,
|
||||
struct scst_mgmt_cmd *mcmd, bool setUA);
|
||||
void __scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
const struct scst_session *sess, const struct scst_device *device);
|
||||
void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
const struct scst_session *sess, const struct scst_device *device,
|
||||
bool scst_mutex_held);
|
||||
const struct scst_session *sess, const struct scst_device *device);
|
||||
void scst_clear_aca(struct scst_tgt_dev *tgt_dev, bool other_ini);
|
||||
|
||||
bool scst_is_ua_global(const uint8_t *sense, int len);
|
||||
|
||||
@@ -6370,18 +6370,14 @@ static bool __scst_check_unblock_aborted_cmd(struct scst_cmd *cmd,
|
||||
return res;
|
||||
}
|
||||
|
||||
void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
const struct scst_session *sess, const struct scst_device *device,
|
||||
bool scst_mutex_held)
|
||||
void __scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
const struct scst_session *sess, const struct scst_device *device)
|
||||
{
|
||||
struct scst_device *dev;
|
||||
|
||||
TRACE_ENTRY();
|
||||
|
||||
if (!scst_mutex_held)
|
||||
mutex_lock(&scst_mutex);
|
||||
else
|
||||
lockdep_assert_held(&scst_mutex);
|
||||
lockdep_assert_held(&scst_mutex);
|
||||
|
||||
list_for_each_entry(dev, &scst_dev_list, dev_list_entry) {
|
||||
struct scst_cmd *cmd, *tcmd;
|
||||
@@ -6435,13 +6431,18 @@ void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
local_irq_enable_nort();
|
||||
}
|
||||
|
||||
if (!scst_mutex_held)
|
||||
mutex_unlock(&scst_mutex);
|
||||
|
||||
TRACE_EXIT();
|
||||
return;
|
||||
}
|
||||
|
||||
void scst_unblock_aborted_cmds(const struct scst_tgt *tgt,
|
||||
const struct scst_session *sess, const struct scst_device *device)
|
||||
{
|
||||
mutex_lock(&scst_mutex);
|
||||
__scst_unblock_aborted_cmds(tgt, sess, device);
|
||||
mutex_unlock(&scst_mutex);
|
||||
}
|
||||
|
||||
static void __scst_abort_task_set(struct scst_mgmt_cmd *mcmd,
|
||||
struct scst_tgt_dev *tgt_dev)
|
||||
{
|
||||
@@ -6520,7 +6521,8 @@ static int scst_abort_task_set(struct scst_mgmt_cmd *mcmd)
|
||||
|
||||
tm_dbg_task_mgmt(mcmd->mcmd_tgt_dev->dev, "ABORT TASK SET/PR ABORT", 0);
|
||||
|
||||
scst_unblock_aborted_cmds(tgt_dev->sess->tgt, tgt_dev->sess, tgt_dev->dev, false);
|
||||
scst_unblock_aborted_cmds(tgt_dev->sess->tgt, tgt_dev->sess,
|
||||
tgt_dev->dev);
|
||||
|
||||
scst_call_dev_task_mgmt_fn_received(mcmd, tgt_dev);
|
||||
|
||||
@@ -6608,7 +6610,7 @@ static int scst_clear_task_set(struct scst_mgmt_cmd *mcmd)
|
||||
|
||||
tm_dbg_task_mgmt(mcmd->mcmd_tgt_dev->dev, "CLEAR TASK SET", 0);
|
||||
|
||||
scst_unblock_aborted_cmds(NULL, NULL, dev, true);
|
||||
__scst_unblock_aborted_cmds(NULL, NULL, dev);
|
||||
|
||||
if (!dev->tas) {
|
||||
uint8_t sense_buffer[SCST_STANDARD_SENSE_LEN];
|
||||
@@ -6803,7 +6805,7 @@ static int scst_target_reset(struct scst_mgmt_cmd *mcmd)
|
||||
list_add_tail(&dev->tm_dev_list_entry, &host_devs);
|
||||
}
|
||||
|
||||
scst_unblock_aborted_cmds(NULL, NULL, NULL, true);
|
||||
__scst_unblock_aborted_cmds(NULL, NULL, NULL);
|
||||
|
||||
/*
|
||||
* We suppose here that for all commands that already on devices
|
||||
@@ -6909,7 +6911,7 @@ static int scst_lun_reset(struct scst_mgmt_cmd *mcmd)
|
||||
dev->scsi_dev->was_reset = 0;
|
||||
}
|
||||
|
||||
scst_unblock_aborted_cmds(NULL, NULL, dev, false);
|
||||
scst_unblock_aborted_cmds(NULL, NULL, dev);
|
||||
|
||||
tm_dbg_task_mgmt(mcmd->mcmd_tgt_dev->dev, "LUN RESET", 0);
|
||||
|
||||
@@ -6986,7 +6988,7 @@ static int scst_abort_all_nexus_loss_sess(struct scst_mgmt_cmd *mcmd,
|
||||
}
|
||||
}
|
||||
|
||||
scst_unblock_aborted_cmds(NULL, sess, NULL, true);
|
||||
__scst_unblock_aborted_cmds(NULL, sess, NULL);
|
||||
|
||||
mutex_unlock(&scst_mutex);
|
||||
|
||||
@@ -7070,7 +7072,7 @@ static int scst_abort_all_nexus_loss_tgt(struct scst_mgmt_cmd *mcmd,
|
||||
}
|
||||
}
|
||||
|
||||
scst_unblock_aborted_cmds(tgt, NULL, NULL, true);
|
||||
__scst_unblock_aborted_cmds(tgt, NULL, NULL);
|
||||
|
||||
mutex_unlock(&scst_mutex);
|
||||
|
||||
@@ -7110,7 +7112,7 @@ static int scst_abort_task(struct scst_mgmt_cmd *mcmd)
|
||||
scst_abort_cmd(cmd, mcmd, 0, 1);
|
||||
spin_unlock_irq(&cmd->sess->sess_list_lock);
|
||||
|
||||
scst_unblock_aborted_cmds(cmd->tgt, cmd->sess, cmd->dev, false);
|
||||
scst_unblock_aborted_cmds(cmd->tgt, cmd->sess, cmd->dev);
|
||||
}
|
||||
|
||||
res = scst_set_mcmd_next_state(mcmd);
|
||||
@@ -7219,7 +7221,7 @@ static int scst_clear_aca_mcmd(struct scst_mgmt_cmd *mcmd)
|
||||
scst_make_deferred_commands_active(order_data);
|
||||
|
||||
scst_unblock_aborted_cmds(mcmd_tgt_dev->sess->tgt, mcmd_tgt_dev->sess,
|
||||
mcmd_tgt_dev->dev, false);
|
||||
mcmd_tgt_dev->dev);
|
||||
|
||||
out_state:
|
||||
res = scst_set_mcmd_next_state(mcmd);
|
||||
|
||||
Reference in New Issue
Block a user