Lines Matching refs:io_request
76 struct pqi_io_request *io_request);
717 static inline void pqi_reinit_io_request(struct pqi_io_request *io_request) in pqi_reinit_io_request() argument
719 io_request->scmd = NULL; in pqi_reinit_io_request()
720 io_request->status = 0; in pqi_reinit_io_request()
721 io_request->error_info = NULL; in pqi_reinit_io_request()
722 io_request->raid_bypass = false; in pqi_reinit_io_request()
727 struct pqi_io_request *io_request; in pqi_alloc_io_request() local
734 io_request = &ctrl_info->io_request_pool[i]; in pqi_alloc_io_request()
735 if (atomic_inc_return(&io_request->refcount) > 1) { in pqi_alloc_io_request()
736 atomic_dec(&io_request->refcount); in pqi_alloc_io_request()
747 io_request = &ctrl_info->io_request_pool[ctrl_info->scsi_ml_can_queue + i]; in pqi_alloc_io_request()
748 if (atomic_inc_return(&io_request->refcount) == 1) in pqi_alloc_io_request()
750 atomic_dec(&io_request->refcount); in pqi_alloc_io_request()
755 if (io_request) in pqi_alloc_io_request()
756 pqi_reinit_io_request(io_request); in pqi_alloc_io_request()
758 return io_request; in pqi_alloc_io_request()
761 static void pqi_free_io_request(struct pqi_io_request *io_request) in pqi_free_io_request() argument
763 atomic_dec(&io_request->refcount); in pqi_free_io_request()
3111 static inline void pqi_aio_path_disabled(struct pqi_io_request *io_request) in pqi_aio_path_disabled() argument
3115 device = io_request->scmd->device->hostdata; in pqi_aio_path_disabled()
3137 static void pqi_process_raid_io_error(struct pqi_io_request *io_request) in pqi_process_raid_io_error() argument
3148 scmd = io_request->scmd; in pqi_process_raid_io_error()
3152 error_info = io_request->error_info; in pqi_process_raid_io_error()
3238 static void pqi_process_aio_io_error(struct pqi_io_request *io_request) in pqi_process_aio_io_error() argument
3250 scmd = io_request->scmd; in pqi_process_aio_io_error()
3251 error_info = io_request->error_info; in pqi_process_aio_io_error()
3279 pqi_aio_path_disabled(io_request); in pqi_process_aio_io_error()
3286 io_request->status = -EAGAIN; in pqi_process_aio_io_error()
3291 if (!io_request->raid_bypass) { in pqi_process_aio_io_error()
3336 struct pqi_io_request *io_request) in pqi_process_io_error() argument
3340 pqi_process_raid_io_error(io_request); in pqi_process_io_error()
3343 pqi_process_aio_io_error(io_request); in pqi_process_io_error()
3387 struct pqi_io_request *io_request; in pqi_process_io_intr() local
3419 io_request = &ctrl_info->io_request_pool[request_id]; in pqi_process_io_intr()
3420 if (atomic_read(&io_request->refcount) == 0) { in pqi_process_io_intr()
3431 if (io_request->scmd) in pqi_process_io_intr()
3432 io_request->scmd->result = 0; in pqi_process_io_intr()
3437 io_request->status = in pqi_process_io_intr()
3442 io_request->status = pqi_interpret_task_management_response(ctrl_info, in pqi_process_io_intr()
3446 pqi_aio_path_disabled(io_request); in pqi_process_io_intr()
3447 io_request->status = -EAGAIN; in pqi_process_io_intr()
3451 io_request->error_info = ctrl_info->error_buffer + in pqi_process_io_intr()
3454 pqi_process_io_error(response->header.iu_type, io_request); in pqi_process_io_intr()
3464 io_request->io_complete_callback(io_request, io_request->context); in pqi_process_io_intr()
4438 struct pqi_io_request *io_request) in pqi_start_io() argument
4453 if (io_request) { in pqi_start_io()
4454 io_request->queue_group = queue_group; in pqi_start_io()
4455 list_add_tail(&io_request->request_list_entry, in pqi_start_io()
4461 list_for_each_entry_safe(io_request, next, in pqi_start_io()
4464 request = io_request->iu; in pqi_start_io()
4501 list_del(&io_request->request_list_entry); in pqi_start_io()
4540 static void pqi_raid_synchronous_complete(struct pqi_io_request *io_request, in pqi_raid_synchronous_complete() argument
4581 struct pqi_io_request *io_request; in pqi_submit_raid_request_synchronous() local
4605 io_request = pqi_alloc_io_request(ctrl_info, NULL); in pqi_submit_raid_request_synchronous()
4607 put_unaligned_le16(io_request->index, in pqi_submit_raid_request_synchronous()
4616 memcpy(io_request->iu, request, iu_length); in pqi_submit_raid_request_synchronous()
4618 io_request->io_complete_callback = pqi_raid_synchronous_complete; in pqi_submit_raid_request_synchronous()
4619 io_request->context = &wait; in pqi_submit_raid_request_synchronous()
4622 io_request); in pqi_submit_raid_request_synchronous()
4627 if (io_request->error_info) in pqi_submit_raid_request_synchronous()
4628 memcpy(error_info, io_request->error_info, sizeof(*error_info)); in pqi_submit_raid_request_synchronous()
4631 } else if (rc == 0 && io_request->error_info) { in pqi_submit_raid_request_synchronous()
4632 rc = pqi_process_raid_io_error_synchronous(io_request->error_info); in pqi_submit_raid_request_synchronous()
4635 pqi_free_io_request(io_request); in pqi_submit_raid_request_synchronous()
5100 struct pqi_io_request *io_request; in pqi_free_all_io_requests() local
5107 io_request = ctrl_info->io_request_pool; in pqi_free_all_io_requests()
5110 kfree(io_request->iu); in pqi_free_all_io_requests()
5111 if (!io_request->sg_chain_buffer) in pqi_free_all_io_requests()
5114 io_request->sg_chain_buffer, in pqi_free_all_io_requests()
5115 io_request->sg_chain_buffer_dma_handle); in pqi_free_all_io_requests()
5116 io_request++; in pqi_free_all_io_requests()
5142 struct pqi_io_request *io_request; in pqi_alloc_io_resources() local
5155 io_request = ctrl_info->io_request_pool; in pqi_alloc_io_resources()
5158 io_request->iu = kmalloc(ctrl_info->max_inbound_iu_length, GFP_KERNEL); in pqi_alloc_io_resources()
5160 if (!io_request->iu) { in pqi_alloc_io_resources()
5176 io_request->index = i; in pqi_alloc_io_resources()
5177 io_request->sg_chain_buffer = sg_chain_buffer; in pqi_alloc_io_resources()
5178 io_request->sg_chain_buffer_dma_handle = sg_chain_buffer_dma_handle; in pqi_alloc_io_resources()
5179 io_request++; in pqi_alloc_io_resources()
5304 struct scatterlist *sg, int sg_count, struct pqi_io_request *io_request, in pqi_build_sg_list() argument
5324 put_unaligned_le64((u64)io_request->sg_chain_buffer_dma_handle, in pqi_build_sg_list()
5331 sg_descriptor = io_request->sg_chain_buffer; in pqi_build_sg_list()
5343 struct pqi_io_request *io_request) in pqi_build_raid_sg_list() argument
5365 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_raid_sg_list()
5379 struct pqi_io_request *io_request) in pqi_build_aio_r1_sg_list() argument
5402 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_r1_sg_list()
5417 struct pqi_io_request *io_request) in pqi_build_aio_r56_sg_list() argument
5438 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_r56_sg_list()
5453 struct pqi_io_request *io_request) in pqi_build_aio_sg_list() argument
5476 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request, in pqi_build_aio_sg_list()
5489 static void pqi_raid_io_complete(struct pqi_io_request *io_request, in pqi_raid_io_complete() argument
5494 scmd = io_request->scmd; in pqi_raid_io_complete()
5495 pqi_free_io_request(io_request); in pqi_raid_io_complete()
5506 struct pqi_io_request *io_request; in pqi_raid_submit_io() local
5509 io_request = pqi_alloc_io_request(ctrl_info, scmd); in pqi_raid_submit_io()
5510 if (!io_request) in pqi_raid_submit_io()
5513 io_request->io_complete_callback = pqi_raid_io_complete; in pqi_raid_submit_io()
5514 io_request->scmd = scmd; in pqi_raid_submit_io()
5516 request = io_request->iu; in pqi_raid_submit_io()
5523 put_unaligned_le16(io_request->index, &request->request_id); in pqi_raid_submit_io()
5573 rc = pqi_build_raid_sg_list(ctrl_info, request, scmd, io_request); in pqi_raid_submit_io()
5575 pqi_free_io_request(io_request); in pqi_raid_submit_io()
5579 pqi_start_io(ctrl_info, queue_group, RAID_PATH, io_request); in pqi_raid_submit_io()
5595 static bool pqi_raid_bypass_retry_needed(struct pqi_io_request *io_request) in pqi_raid_bypass_retry_needed() argument
5601 if (!io_request->raid_bypass) in pqi_raid_bypass_retry_needed()
5604 scmd = io_request->scmd; in pqi_raid_bypass_retry_needed()
5621 static void pqi_aio_io_complete(struct pqi_io_request *io_request, in pqi_aio_io_complete() argument
5626 scmd = io_request->scmd; in pqi_aio_io_complete()
5628 if (io_request->status == -EAGAIN || pqi_raid_bypass_retry_needed(io_request)) { in pqi_aio_io_complete()
5633 pqi_free_io_request(io_request); in pqi_aio_io_complete()
5657 struct pqi_io_request *io_request; in pqi_aio_submit_io() local
5660 io_request = pqi_alloc_io_request(ctrl_info, scmd); in pqi_aio_submit_io()
5661 if (!io_request) in pqi_aio_submit_io()
5664 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_io()
5665 io_request->scmd = scmd; in pqi_aio_submit_io()
5666 io_request->raid_bypass = raid_bypass; in pqi_aio_submit_io()
5668 request = io_request->iu; in pqi_aio_submit_io()
5676 put_unaligned_le16(io_request->index, &request->request_id); in pqi_aio_submit_io()
5715 rc = pqi_build_aio_sg_list(ctrl_info, request, scmd, io_request); in pqi_aio_submit_io()
5717 pqi_free_io_request(io_request); in pqi_aio_submit_io()
5721 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_io()
5732 struct pqi_io_request *io_request; in pqi_aio_submit_r1_write_io() local
5735 io_request = pqi_alloc_io_request(ctrl_info, scmd); in pqi_aio_submit_r1_write_io()
5736 if (!io_request) in pqi_aio_submit_r1_write_io()
5739 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_r1_write_io()
5740 io_request->scmd = scmd; in pqi_aio_submit_r1_write_io()
5741 io_request->raid_bypass = true; in pqi_aio_submit_r1_write_io()
5743 r1_request = io_request->iu; in pqi_aio_submit_r1_write_io()
5756 put_unaligned_le16(io_request->index, &r1_request->request_id); in pqi_aio_submit_r1_write_io()
5776 rc = pqi_build_aio_r1_sg_list(ctrl_info, r1_request, scmd, io_request); in pqi_aio_submit_r1_write_io()
5778 pqi_free_io_request(io_request); in pqi_aio_submit_r1_write_io()
5782 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_r1_write_io()
5793 struct pqi_io_request *io_request; in pqi_aio_submit_r56_write_io() local
5796 io_request = pqi_alloc_io_request(ctrl_info, scmd); in pqi_aio_submit_r56_write_io()
5797 if (!io_request) in pqi_aio_submit_r56_write_io()
5799 io_request->io_complete_callback = pqi_aio_io_complete; in pqi_aio_submit_r56_write_io()
5800 io_request->scmd = scmd; in pqi_aio_submit_r56_write_io()
5801 io_request->raid_bypass = true; in pqi_aio_submit_r56_write_io()
5803 r56_request = io_request->iu; in pqi_aio_submit_r56_write_io()
5822 put_unaligned_le16(io_request->index, &r56_request->request_id); in pqi_aio_submit_r56_write_io()
5843 rc = pqi_build_aio_r56_sg_list(ctrl_info, r56_request, scmd, io_request); in pqi_aio_submit_r56_write_io()
5845 pqi_free_io_request(io_request); in pqi_aio_submit_r56_write_io()
5849 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request); in pqi_aio_submit_r56_write_io()
6056 struct pqi_io_request *io_request; in pqi_queued_io_count() local
6064 list_for_each_entry(io_request, &queue_group->request_list[path], request_list_entry) in pqi_queued_io_count()
6144 struct pqi_io_request *io_request; in pqi_fail_io_queued_for_device() local
6156 list_for_each_entry_safe(io_request, next, in pqi_fail_io_queued_for_device()
6160 scmd = io_request->scmd; in pqi_fail_io_queued_for_device()
6171 list_del(&io_request->request_list_entry); in pqi_fail_io_queued_for_device()
6173 pqi_free_io_request(io_request); in pqi_fail_io_queued_for_device()
6224 static void pqi_lun_reset_complete(struct pqi_io_request *io_request, in pqi_lun_reset_complete() argument
6271 struct pqi_io_request *io_request; in pqi_lun_reset() local
6275 io_request = pqi_alloc_io_request(ctrl_info, NULL); in pqi_lun_reset()
6276 io_request->io_complete_callback = pqi_lun_reset_complete; in pqi_lun_reset()
6277 io_request->context = &wait; in pqi_lun_reset()
6279 request = io_request->iu; in pqi_lun_reset()
6285 put_unaligned_le16(io_request->index, &request->request_id); in pqi_lun_reset()
6295 io_request); in pqi_lun_reset()
6299 rc = io_request->status; in pqi_lun_reset()
6301 pqi_free_io_request(io_request); in pqi_lun_reset()
8958 struct pqi_io_request *io_request; in pqi_fail_all_outstanding_requests() local
8963 io_request = &ctrl_info->io_request_pool[i]; in pqi_fail_all_outstanding_requests()
8964 if (atomic_read(&io_request->refcount) == 0) in pqi_fail_all_outstanding_requests()
8967 scmd = io_request->scmd; in pqi_fail_all_outstanding_requests()
8971 pqi_free_io_request(io_request); in pqi_fail_all_outstanding_requests()
8977 io_request->status = -ENXIO; in pqi_fail_all_outstanding_requests()
8978 io_request->error_info = in pqi_fail_all_outstanding_requests()
8982 io_request->io_complete_callback(io_request, in pqi_fail_all_outstanding_requests()
8983 io_request->context); in pqi_fail_all_outstanding_requests()
9168 struct pqi_io_request *io_request; in pqi_crash_if_pending_command() local
9172 io_request = &ctrl_info->io_request_pool[i]; in pqi_crash_if_pending_command()
9173 if (atomic_read(&io_request->refcount) == 0) in pqi_crash_if_pending_command()
9175 scmd = io_request->scmd; in pqi_crash_if_pending_command()