Lines Matching refs:io_request
74 struct pqi_io_request *io_request);
673 static inline void pqi_reinit_io_request(struct pqi_io_request *io_request) in pqi_reinit_io_request() argument
675 io_request->scmd = NULL; in pqi_reinit_io_request()
676 io_request->status = 0; in pqi_reinit_io_request()
677 io_request->error_info = NULL; in pqi_reinit_io_request()
678 io_request->raid_bypass = false; in pqi_reinit_io_request()
684 struct pqi_io_request *io_request; in pqi_alloc_io_request() local
688 io_request = &ctrl_info->io_request_pool[i]; in pqi_alloc_io_request()
689 if (atomic_inc_return(&io_request->refcount) == 1) in pqi_alloc_io_request()
691 atomic_dec(&io_request->refcount); in pqi_alloc_io_request()
698 pqi_reinit_io_request(io_request); in pqi_alloc_io_request()
700 return io_request; in pqi_alloc_io_request()
703 static void pqi_free_io_request(struct pqi_io_request *io_request) in pqi_free_io_request() argument
705 atomic_dec(&io_request->refcount); in pqi_free_io_request()
3104 static inline void pqi_aio_path_disabled(struct pqi_io_request *io_request) in pqi_aio_path_disabled() argument
3108 device = io_request->scmd->device->hostdata; in pqi_aio_path_disabled()
3130 static void pqi_process_raid_io_error(struct pqi_io_request *io_request) in pqi_process_raid_io_error() argument
3141 scmd = io_request->scmd; in pqi_process_raid_io_error()
3145 error_info = io_request->error_info; in pqi_process_raid_io_error()
3231 static void pqi_process_aio_io_error(struct pqi_io_request *io_request) in pqi_process_aio_io_error() argument
3243 scmd = io_request->scmd; in pqi_process_aio_io_error()
3244 error_info = io_request->error_info; in pqi_process_aio_io_error()
3272 pqi_aio_path_disabled(io_request); in pqi_process_aio_io_error()
3279 io_request->status = -EAGAIN; in pqi_process_aio_io_error()
3284 if (!io_request->raid_bypass) { in pqi_process_aio_io_error()
3329 struct pqi_io_request *io_request) in pqi_process_io_error() argument
3333 pqi_process_raid_io_error(io_request); in pqi_process_io_error()
3336 pqi_process_aio_io_error(io_request); in pqi_process_io_error()
3380 struct pqi_io_request *io_request; in pqi_process_io_intr() local
3412 io_request = &ctrl_info->io_request_pool[request_id]; in pqi_process_io_intr()
3413 if (atomic_read(&io_request->refcount) == 0) { in pqi_process_io_intr()
3424 if (io_request->scmd) in pqi_process_io_intr()
3425 io_request->scmd->result = 0; in pqi_process_io_intr()
3430 io_request->status = in pqi_process_io_intr()
3435 io_request->status = pqi_interpret_task_management_response(ctrl_info, in pqi_process_io_intr()
3439 pqi_aio_path_disabled(io_request); in pqi_process_io_intr()
3440 io_request->status = -EAGAIN; in pqi_process_io_intr()
3444 io_request->error_info = ctrl_info->error_buffer + in pqi_process_io_intr()
3447 pqi_process_io_error(response->header.iu_type, io_request); in pqi_process_io_intr()
3457 io_request->io_complete_callback(io_request, io_request->context); in pqi_process_io_intr()
4431 struct pqi_io_request *io_request) in pqi_start_io() argument
4446 if (io_request) { in pqi_start_io()
4447 io_request->queue_group = queue_group; in pqi_start_io()
4448 list_add_tail(&io_request->request_list_entry, in pqi_start_io()
4454 list_for_each_entry_safe(io_request, next, in pqi_start_io()
4457 request = io_request->iu; in pqi_start_io()
4494 list_del(&io_request->request_list_entry); in pqi_start_io()
4533 static void pqi_raid_synchronous_complete(struct pqi_io_request *io_request, in pqi_raid_synchronous_complete() argument
4574 struct pqi_io_request *io_request; in pqi_submit_raid_request_synchronous() local
4598 io_request = pqi_alloc_io_request(ctrl_info); in pqi_submit_raid_request_synchronous()
4600 put_unaligned_le16(io_request->index, in pqi_submit_raid_request_synchronous()
4609 memcpy(io_request->iu, request, iu_length); in pqi_submit_raid_request_synchronous()
4611 io_request->io_complete_callback = pqi_raid_synchronous_complete; in pqi_submit_raid_request_synchronous()
4612 io_request->context = &wait; in pqi_submit_raid_request_synchronous()
4615 io_request); in pqi_submit_raid_request_synchronous()
4620 if (io_request->error_info) in pqi_submit_raid_request_synchronous()
4621 memcpy(error_info, io_request->error_info, sizeof(*error_info)); in pqi_submit_raid_request_synchronous()
4624 } else if (rc == 0 && io_request->error_info) { in pqi_submit_raid_request_synchronous()
4625 rc = pqi_process_raid_io_error_synchronous(io_request->error_info); in pqi_submit_raid_request_synchronous()
4628 pqi_free_io_request(io_request); in pqi_submit_raid_request_synchronous()
5093 struct pqi_io_request *io_request; in pqi_free_all_io_requests() local
5100 io_request = ctrl_info->io_request_pool; in pqi_free_all_io_requests()
5103 kfree(io_request->iu); in pqi_free_all_io_requests()
5104 if (!io_request->sg_chain_buffer) in pqi_free_all_io_requests()
5107 io_request->sg_chain_buffer, in pqi_free_all_io_requests()
5108 io_request->sg_chain_buffer_dma_handle); in pqi_free_all_io_requests()
5109 io_request++; in pqi_free_all_io_requests()
5135 struct pqi_io_request *io_request; in pqi_alloc_io_resources() local
5148 io_request = ctrl_info->io_request_pool; in pqi_alloc_io_resources()
5151 io_request->iu = kmalloc(ctrl_info->max_inbound_iu_length, GFP_KERNEL); in pqi_alloc_io_resources()
5153 if (!io_request->iu) { in pqi_alloc_io_resources()
5169 io_request->index = i; in pqi_alloc_io_resources()
5170 io_request->sg_chain_buffer = sg_chain_buffer; in pqi_alloc_io_resources()
5171 io_request->sg_chain_buffer_dma_handle = sg_chain_buffer_dma_handle; in pqi_alloc_io_resources()
5172 io_request++; in pqi_alloc_io_resources()
5298 struct scatterlist *sg, int sg_count, struct pqi_io_request *io_request, in pqi_build_sg_list() argument
5318 put_unaligned_le64((u64)io_request->sg_chain_buffer_dma_handle, in pqi_build_sg_list()
5325 sg_descriptor = io_request->sg_chain_buffer; in pqi_build_sg_list()
5337 struct pqi_io_request *io_request) in pqi_build_raid_sg_list() argument
5359 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_raid_sg_list()
5373 struct pqi_io_request *io_request) in pqi_build_aio_r1_sg_list() argument
5396 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_r1_sg_list()
5411 struct pqi_io_request *io_request) in pqi_build_aio_r56_sg_list() argument
5432 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_r56_sg_list()
5447 struct pqi_io_request *io_request) in pqi_build_aio_sg_list() argument
5470 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_sg_list()
5483 static void pqi_raid_io_complete(struct pqi_io_request *io_request, in pqi_raid_io_complete() argument
5488 scmd = io_request->scmd; in pqi_raid_io_complete()
5489 pqi_free_io_request(io_request); in pqi_raid_io_complete()
5495 struct pqi_ctrl_info *ctrl_info, struct pqi_io_request *io_request, in pqi_raid_submit_scsi_cmd_with_io_request() argument
5503 io_request->io_complete_callback = pqi_raid_io_complete; in pqi_raid_submit_scsi_cmd_with_io_request()
5504 io_request->scmd = scmd; in pqi_raid_submit_scsi_cmd_with_io_request()
5506 request = io_request->iu; in pqi_raid_submit_scsi_cmd_with_io_request()
5512 put_unaligned_le16(io_request->index, &request->request_id); in pqi_raid_submit_scsi_cmd_with_io_request()
5562 rc = pqi_build_raid_sg_list(ctrl_info, request, scmd, io_request); in pqi_raid_submit_scsi_cmd_with_io_request()
5564 pqi_free_io_request(io_request); in pqi_raid_submit_scsi_cmd_with_io_request()
5568 pqi_start_io(ctrl_info, queue_group, RAID_PATH, io_request); in pqi_raid_submit_scsi_cmd_with_io_request()
5577 struct pqi_io_request *io_request; in pqi_raid_submit_scsi_cmd() local
5579 io_request = pqi_alloc_io_request(ctrl_info); in pqi_raid_submit_scsi_cmd()
5581 return pqi_raid_submit_scsi_cmd_with_io_request(ctrl_info, io_request, in pqi_raid_submit_scsi_cmd()
5585 static bool pqi_raid_bypass_retry_needed(struct pqi_io_request *io_request) in pqi_raid_bypass_retry_needed() argument
5591 if (!io_request->raid_bypass) in pqi_raid_bypass_retry_needed()
5594 scmd = io_request->scmd; in pqi_raid_bypass_retry_needed()
5611 static void pqi_aio_io_complete(struct pqi_io_request *io_request, in pqi_aio_io_complete() argument
5616 scmd = io_request->scmd; in pqi_aio_io_complete()
5618 if (io_request->status == -EAGAIN || pqi_raid_bypass_retry_needed(io_request)) { in pqi_aio_io_complete()
5623 pqi_free_io_request(io_request); in pqi_aio_io_complete()
5678 struct pqi_io_request *io_request; in pqi_aio_submit_io() local
5683 io_request = pqi_alloc_io_request(ctrl_info); in pqi_aio_submit_io()
5684 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_io()
5685 io_request->scmd = scmd; in pqi_aio_submit_io()
5686 io_request->raid_bypass = raid_bypass; in pqi_aio_submit_io()
5688 request = io_request->iu; in pqi_aio_submit_io()
5696 put_unaligned_le16(io_request->index, &request->request_id); in pqi_aio_submit_io()
5735 rc = pqi_build_aio_sg_list(ctrl_info, request, scmd, io_request); in pqi_aio_submit_io()
5737 pqi_free_io_request(io_request); in pqi_aio_submit_io()
5741 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_io()
5752 struct pqi_io_request *io_request; in pqi_aio_submit_r1_write_io() local
5755 io_request = pqi_alloc_io_request(ctrl_info); in pqi_aio_submit_r1_write_io()
5756 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_r1_write_io()
5757 io_request->scmd = scmd; in pqi_aio_submit_r1_write_io()
5758 io_request->raid_bypass = true; in pqi_aio_submit_r1_write_io()
5760 r1_request = io_request->iu; in pqi_aio_submit_r1_write_io()
5773 put_unaligned_le16(io_request->index, &r1_request->request_id); in pqi_aio_submit_r1_write_io()
5793 rc = pqi_build_aio_r1_sg_list(ctrl_info, r1_request, scmd, io_request); in pqi_aio_submit_r1_write_io()
5795 pqi_free_io_request(io_request); in pqi_aio_submit_r1_write_io()
5799 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_r1_write_io()
5810 struct pqi_io_request *io_request; in pqi_aio_submit_r56_write_io() local
5813 io_request = pqi_alloc_io_request(ctrl_info); in pqi_aio_submit_r56_write_io()
5814 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_r56_write_io()
5815 io_request->scmd = scmd; in pqi_aio_submit_r56_write_io()
5816 io_request->raid_bypass = true; in pqi_aio_submit_r56_write_io()
5818 r56_request = io_request->iu; in pqi_aio_submit_r56_write_io()
5837 put_unaligned_le16(io_request->index, &r56_request->request_id); in pqi_aio_submit_r56_write_io()
5858 rc = pqi_build_aio_r56_sg_list(ctrl_info, r56_request, scmd, io_request); in pqi_aio_submit_r56_write_io()
5860 pqi_free_io_request(io_request); in pqi_aio_submit_r56_write_io()
5864 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_r56_write_io()
6062 struct pqi_io_request *io_request; in pqi_queued_io_count() local
6070 list_for_each_entry(io_request, &queue_group->request_list[path], request_list_entry) in pqi_queued_io_count()
6150 struct pqi_io_request *io_request; in pqi_fail_io_queued_for_device() local
6162 list_for_each_entry_safe(io_request, next, in pqi_fail_io_queued_for_device()
6166 scmd = io_request->scmd; in pqi_fail_io_queued_for_device()
6174 list_del(&io_request->request_list_entry); in pqi_fail_io_queued_for_device()
6176 pqi_free_io_request(io_request); in pqi_fail_io_queued_for_device()
6227 static void pqi_lun_reset_complete(struct pqi_io_request *io_request, in pqi_lun_reset_complete() argument
6274 struct pqi_io_request *io_request; in pqi_lun_reset() local
6280 io_request = pqi_alloc_io_request(ctrl_info); in pqi_lun_reset()
6281 io_request->io_complete_callback = pqi_lun_reset_complete; in pqi_lun_reset()
6282 io_request->context = &wait; in pqi_lun_reset()
6284 request = io_request->iu; in pqi_lun_reset()
6290 put_unaligned_le16(io_request->index, &request->request_id); in pqi_lun_reset()
6300 io_request); in pqi_lun_reset()
6304 rc = io_request->status; in pqi_lun_reset()
6306 pqi_free_io_request(io_request); in pqi_lun_reset()
8893 struct pqi_io_request *io_request; in pqi_fail_all_outstanding_requests() local
8898 io_request = &ctrl_info->io_request_pool[i]; in pqi_fail_all_outstanding_requests()
8899 if (atomic_read(&io_request->refcount) == 0) in pqi_fail_all_outstanding_requests()
8902 scmd = io_request->scmd; in pqi_fail_all_outstanding_requests()
8906 pqi_free_io_request(io_request); in pqi_fail_all_outstanding_requests()
8912 io_request->status = -ENXIO; in pqi_fail_all_outstanding_requests()
8913 io_request->error_info = in pqi_fail_all_outstanding_requests()
8917 io_request->io_complete_callback(io_request, in pqi_fail_all_outstanding_requests()
8918 io_request->context); in pqi_fail_all_outstanding_requests()
9046 struct pqi_io_request *io_request; in pqi_crash_if_pending_command() local
9050 io_request = &ctrl_info->io_request_pool[i]; in pqi_crash_if_pending_command()
9051 if (atomic_read(&io_request->refcount) == 0) in pqi_crash_if_pending_command()
9053 scmd = io_request->scmd; in pqi_crash_if_pending_command()