scsi: target/core: Add target_send_busy()
Introduce a function that sends the SCSI status "BUSY" back to the initiator. The next patch will add a call to this function in the srpt target driver. Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Nicholas Bellinger <nab@linux-iscsi.org> Cc: Mike Christie <mchristi@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
83f85b8ec3
commit
94ebb47160
|
@ -3246,6 +3246,22 @@ transport_send_check_condition_and_sense(struct se_cmd *cmd,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(transport_send_check_condition_and_sense);
|
EXPORT_SYMBOL(transport_send_check_condition_and_sense);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_send_busy - Send SCSI BUSY status back to the initiator
|
||||||
|
* @cmd: SCSI command for which to send a BUSY reply.
|
||||||
|
*
|
||||||
|
* Note: Only call this function if target_submit_cmd*() failed.
|
||||||
|
*/
|
||||||
|
int target_send_busy(struct se_cmd *cmd)
|
||||||
|
{
|
||||||
|
WARN_ON_ONCE(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB);
|
||||||
|
|
||||||
|
cmd->scsi_status = SAM_STAT_BUSY;
|
||||||
|
trace_target_cmd_complete(cmd);
|
||||||
|
return cmd->se_tfo->queue_status(cmd);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(target_send_busy);
|
||||||
|
|
||||||
static void target_tmr_work(struct work_struct *work)
|
static void target_tmr_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct se_cmd *cmd = container_of(work, struct se_cmd, work);
|
struct se_cmd *cmd = container_of(work, struct se_cmd, work);
|
||||||
|
|
|
@ -173,6 +173,7 @@ int transport_generic_free_cmd(struct se_cmd *, int);
|
||||||
bool transport_wait_for_tasks(struct se_cmd *);
|
bool transport_wait_for_tasks(struct se_cmd *);
|
||||||
int transport_send_check_condition_and_sense(struct se_cmd *,
|
int transport_send_check_condition_and_sense(struct se_cmd *,
|
||||||
sense_reason_t, int);
|
sense_reason_t, int);
|
||||||
|
int target_send_busy(struct se_cmd *cmd);
|
||||||
int target_get_sess_cmd(struct se_cmd *, bool);
|
int target_get_sess_cmd(struct se_cmd *, bool);
|
||||||
int target_put_sess_cmd(struct se_cmd *);
|
int target_put_sess_cmd(struct se_cmd *);
|
||||||
void target_sess_cmd_list_set_waiting(struct se_session *);
|
void target_sess_cmd_list_set_waiting(struct se_session *);
|
||||||
|
|
Loading…
Reference in New Issue