diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index 9a27f7041..e5a5e7b67 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -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; diff --git a/scst/src/scst_priv.h b/scst/src/scst_priv.h index d5d5d2ec5..fee3216be 100644 --- a/scst/src/scst_priv.h +++ b/scst/src/scst_priv.h @@ -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); diff --git a/scst/src/scst_targ.c b/scst/src/scst_targ.c index 94f19b202..d37d3dfb6 100644 --- a/scst/src/scst_targ.c +++ b/scst/src/scst_targ.c @@ -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);