Lines Matching full:task
36 /* record final status and free the task */
37 static void sas_end_task(struct scsi_cmnd *sc, struct sas_task *task) in sas_end_task() argument
39 struct task_status_struct *ts = &task->task_status; in sas_end_task()
46 /* task delivered, what happened afterwards? */ in sas_end_task()
79 pr_notice("LLDD:%s sent SAS_PROTO_RESP for an SSP task; please report this\n", in sas_end_task()
80 task->dev->port->ha->sas_ha_name); in sas_end_task()
98 sas_free_task(task); in sas_end_task()
101 static void sas_scsi_task_done(struct sas_task *task) in sas_scsi_task_done() argument
103 struct scsi_cmnd *sc = task->uldd_task; in sas_scsi_task_done()
104 struct domain_device *dev = task->dev; in sas_scsi_task_done()
110 task = NULL; in sas_scsi_task_done()
115 if (unlikely(!task)) { in sas_scsi_task_done()
116 /* task will be completed by the error handler */ in sas_scsi_task_done()
117 pr_debug("task done but aborted\n"); in sas_scsi_task_done()
123 sas_free_task(task); in sas_scsi_task_done()
127 sas_end_task(sc, task); in sas_scsi_task_done()
135 struct sas_task *task = sas_alloc_task(gfp_flags); in sas_create_task() local
138 if (!task) in sas_create_task()
141 task->uldd_task = cmd; in sas_create_task()
142 ASSIGN_SAS_TASK(cmd, task); in sas_create_task()
144 task->dev = dev; in sas_create_task()
145 task->task_proto = task->dev->tproto; /* BUG_ON(!SSP) */ in sas_create_task()
147 task->ssp_task.retry_count = 1; in sas_create_task()
149 memcpy(task->ssp_task.LUN, &lun.scsi_lun, 8); in sas_create_task()
150 task->ssp_task.task_attr = TASK_ATTR_SIMPLE; in sas_create_task()
151 task->ssp_task.cmd = cmd; in sas_create_task()
153 task->scatter = scsi_sglist(cmd); in sas_create_task()
154 task->num_scatter = scsi_sg_count(cmd); in sas_create_task()
155 task->total_xfer_len = scsi_bufflen(cmd); in sas_create_task()
156 task->data_dir = cmd->sc_data_direction; in sas_create_task()
158 task->task_done = sas_scsi_task_done; in sas_create_task()
160 return task; in sas_create_task()
167 struct sas_task *task; in sas_queuecommand() local
183 task = sas_create_task(cmd, dev, GFP_ATOMIC); in sas_queuecommand()
184 if (!task) in sas_queuecommand()
187 res = i->dft->lldd_execute_task(task, GFP_ATOMIC); in sas_queuecommand()
195 sas_free_task(task); in sas_queuecommand()
209 struct sas_task *task = TO_SAS_TASK(cmd); in sas_eh_finish_cmd() local
212 * of the task, so we should be guaranteed not to be racing with in sas_eh_finish_cmd()
213 * any completions from the LLD. Task is freed after this. in sas_eh_finish_cmd()
215 sas_end_task(cmd, task); in sas_eh_finish_cmd()
278 static enum task_disposition sas_scsi_find_task(struct sas_task *task) in sas_scsi_find_task() argument
283 to_sas_internal(task->dev->port->ha->core.shost->transportt); in sas_scsi_find_task()
286 pr_notice("%s: aborting task 0x%p\n", __func__, task); in sas_scsi_find_task()
287 res = si->dft->lldd_abort_task(task); in sas_scsi_find_task()
289 spin_lock_irqsave(&task->task_state_lock, flags); in sas_scsi_find_task()
290 if (task->task_state_flags & SAS_TASK_STATE_DONE) { in sas_scsi_find_task()
291 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_scsi_find_task()
292 pr_debug("%s: task 0x%p is done\n", __func__, task); in sas_scsi_find_task()
295 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_scsi_find_task()
298 pr_notice("%s: task 0x%p is aborted\n", in sas_scsi_find_task()
299 __func__, task); in sas_scsi_find_task()
302 pr_notice("%s: querying task 0x%p\n", __func__, task); in sas_scsi_find_task()
303 res = si->dft->lldd_query_task(task); in sas_scsi_find_task()
306 pr_notice("%s: task 0x%p at LU\n", __func__, in sas_scsi_find_task()
307 task); in sas_scsi_find_task()
310 pr_notice("%s: task 0x%p not at LU\n", in sas_scsi_find_task()
311 __func__, task); in sas_scsi_find_task()
314 pr_notice("%s: task 0x%p failed to abort\n", in sas_scsi_find_task()
315 __func__, task); in sas_scsi_find_task()
333 pr_notice("eh: device %016llx LUN 0x%llx has the task\n", in sas_recover_lu()
463 struct sas_task *task = TO_SAS_TASK(cmd); in sas_eh_abort_handler() local
480 if (task) in sas_eh_abort_handler()
481 res = i->dft->lldd_abort_task(task); in sas_eh_abort_handler()
483 pr_notice("no task to abort\n"); in sas_eh_abort_handler()
569 struct sas_task *task; in sas_eh_handle_sas_errors() local
573 * SAS_HA_FROZEN and is leaving the task alone, or has in sas_eh_handle_sas_errors()
576 task = TO_SAS_TASK(cmd); in sas_eh_handle_sas_errors()
579 if (!task) in sas_eh_handle_sas_errors()
585 struct sas_task *task = TO_SAS_TASK(cmd); in sas_eh_handle_sas_errors() local
589 spin_lock_irqsave(&task->task_state_lock, flags); in sas_eh_handle_sas_errors()
590 need_reset = task->task_state_flags & SAS_TASK_NEED_DEV_RESET; in sas_eh_handle_sas_errors()
591 spin_unlock_irqrestore(&task->task_state_lock, flags); in sas_eh_handle_sas_errors()
594 pr_notice("%s: task 0x%p requests reset\n", in sas_eh_handle_sas_errors()
595 __func__, task); in sas_eh_handle_sas_errors()
599 pr_debug("trying to find task 0x%p\n", task); in sas_eh_handle_sas_errors()
600 res = sas_scsi_find_task(task); in sas_eh_handle_sas_errors()
604 pr_notice("%s: task 0x%p is done\n", __func__, in sas_eh_handle_sas_errors()
605 task); in sas_eh_handle_sas_errors()
609 pr_notice("%s: task 0x%p is aborted\n", in sas_eh_handle_sas_errors()
610 __func__, task); in sas_eh_handle_sas_errors()
614 pr_info("task 0x%p is at LU: lu recover\n", task); in sas_eh_handle_sas_errors()
616 tmf_resp = sas_recover_lu(task->dev, cmd); in sas_eh_handle_sas_errors()
619 SAS_ADDR(task->dev), in sas_eh_handle_sas_errors()
628 pr_notice("task 0x%p is not at LU: I_T recover\n", in sas_eh_handle_sas_errors()
629 task); in sas_eh_handle_sas_errors()
630 tmf_resp = sas_recover_I_T(task->dev); in sas_eh_handle_sas_errors()
633 struct domain_device *dev = task->dev; in sas_eh_handle_sas_errors()
635 SAS_ADDR(task->dev->sas_addr)); in sas_eh_handle_sas_errors()
643 struct asd_sas_port *port = task->dev->port; in sas_eh_handle_sas_errors()
670 SAS_ADDR(task->dev->sas_addr), in sas_eh_handle_sas_errors()
889 * Tell an upper layer that it needs to initiate an abort for a given task.
892 void sas_task_abort(struct sas_task *task) in sas_task_abort() argument
894 struct scsi_cmnd *sc = task->uldd_task; in sas_task_abort()
898 struct sas_task_slow *slow = task->slow_task; in sas_task_abort()
908 if (dev_is_sata(task->dev)) in sas_task_abort()
909 sas_ata_task_abort(task); in sas_task_abort()