Lines Matching defs:io_request
76 struct pqi_io_request *io_request);
717 static inline void pqi_reinit_io_request(struct pqi_io_request *io_request)
719 io_request->scmd = NULL;
720 io_request->status = 0;
721 io_request->error_info = NULL;
722 io_request->raid_bypass = false;
727 struct pqi_io_request *io_request;
734 io_request = &ctrl_info->io_request_pool[i];
735 if (atomic_inc_return(&io_request->refcount) > 1) {
736 atomic_dec(&io_request->refcount);
747 io_request = &ctrl_info->io_request_pool[ctrl_info->scsi_ml_can_queue + i];
748 if (atomic_inc_return(&io_request->refcount) == 1)
750 atomic_dec(&io_request->refcount);
755 if (io_request)
756 pqi_reinit_io_request(io_request);
758 return io_request;
761 static void pqi_free_io_request(struct pqi_io_request *io_request)
763 atomic_dec(&io_request->refcount);
3125 static inline void pqi_aio_path_disabled(struct pqi_io_request *io_request)
3129 device = io_request->scmd->device->hostdata;
3151 static void pqi_process_raid_io_error(struct pqi_io_request *io_request)
3162 scmd = io_request->scmd;
3166 error_info = io_request->error_info;
3252 static void pqi_process_aio_io_error(struct pqi_io_request *io_request)
3264 scmd = io_request->scmd;
3265 error_info = io_request->error_info;
3293 pqi_aio_path_disabled(io_request);
3300 io_request->status = -EAGAIN;
3305 if (!io_request->raid_bypass) {
3350 struct pqi_io_request *io_request)
3354 pqi_process_raid_io_error(io_request);
3357 pqi_process_aio_io_error(io_request);
3401 struct pqi_io_request *io_request;
3433 io_request = &ctrl_info->io_request_pool[request_id];
3434 if (atomic_read(&io_request->refcount) == 0) {
3445 if (io_request->scmd)
3446 io_request->scmd->result = 0;
3451 io_request->status =
3456 io_request->status = pqi_interpret_task_management_response(ctrl_info,
3460 pqi_aio_path_disabled(io_request);
3461 io_request->status = -EAGAIN;
3465 io_request->error_info = ctrl_info->error_buffer +
3468 pqi_process_io_error(response->header.iu_type, io_request);
3478 io_request->io_complete_callback(io_request, io_request->context);
4467 struct pqi_io_request *io_request)
4482 if (io_request) {
4483 io_request->queue_group = queue_group;
4484 list_add_tail(&io_request->request_list_entry,
4490 list_for_each_entry_safe(io_request, next,
4493 request = io_request->iu;
4530 list_del(&io_request->request_list_entry);
4569 static void pqi_raid_synchronous_complete(struct pqi_io_request *io_request,
4610 struct pqi_io_request *io_request;
4634 io_request = pqi_alloc_io_request(ctrl_info, NULL);
4636 put_unaligned_le16(io_request->index,
4645 memcpy(io_request->iu, request, iu_length);
4647 io_request->io_complete_callback = pqi_raid_synchronous_complete;
4648 io_request->context = &wait;
4651 io_request);
4656 if (io_request->error_info)
4657 memcpy(error_info, io_request->error_info, sizeof(*error_info));
4660 } else if (rc == 0 && io_request->error_info) {
4661 rc = pqi_process_raid_io_error_synchronous(io_request->error_info);
4664 pqi_free_io_request(io_request);
5129 struct pqi_io_request *io_request;
5136 io_request = ctrl_info->io_request_pool;
5139 kfree(io_request->iu);
5140 if (!io_request->sg_chain_buffer)
5143 io_request->sg_chain_buffer,
5144 io_request->sg_chain_buffer_dma_handle);
5145 io_request++;
5171 struct pqi_io_request *io_request;
5184 io_request = ctrl_info->io_request_pool;
5187 io_request->iu = kmalloc(ctrl_info->max_inbound_iu_length, GFP_KERNEL);
5189 if (!io_request->iu) {
5205 io_request->index = i;
5206 io_request->sg_chain_buffer = sg_chain_buffer;
5207 io_request->sg_chain_buffer_dma_handle = sg_chain_buffer_dma_handle;
5208 io_request++;
5333 struct scatterlist *sg, int sg_count, struct pqi_io_request *io_request,
5353 put_unaligned_le64((u64)io_request->sg_chain_buffer_dma_handle,
5360 sg_descriptor = io_request->sg_chain_buffer;
5372 struct pqi_io_request *io_request)
5394 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request,
5408 struct pqi_io_request *io_request)
5431 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request,
5446 struct pqi_io_request *io_request)
5467 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request,
5482 struct pqi_io_request *io_request)
5505 num_sg_in_iu = pqi_build_sg_list(sg_descriptor, sg, sg_count, io_request,
5518 static void pqi_raid_io_complete(struct pqi_io_request *io_request,
5523 scmd = io_request->scmd;
5524 pqi_free_io_request(io_request);
5535 struct pqi_io_request *io_request;
5538 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5539 if (!io_request)
5542 io_request->io_complete_callback = pqi_raid_io_complete;
5543 io_request->scmd = scmd;
5545 request = io_request->iu;
5552 put_unaligned_le16(io_request->index, &request->request_id);
5602 rc = pqi_build_raid_sg_list(ctrl_info, request, scmd, io_request);
5604 pqi_free_io_request(io_request);
5608 pqi_start_io(ctrl_info, queue_group, RAID_PATH, io_request);
5624 static bool pqi_raid_bypass_retry_needed(struct pqi_io_request *io_request)
5630 if (!io_request->raid_bypass)
5633 scmd = io_request->scmd;
5650 static void pqi_aio_io_complete(struct pqi_io_request *io_request,
5655 scmd = io_request->scmd;
5657 if (io_request->status == -EAGAIN || pqi_raid_bypass_retry_needed(io_request)) {
5662 pqi_free_io_request(io_request);
5686 struct pqi_io_request *io_request;
5689 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5690 if (!io_request)
5693 io_request->io_complete_callback = pqi_aio_io_complete;
5694 io_request->scmd = scmd;
5695 io_request->raid_bypass = raid_bypass;
5697 request = io_request->iu;
5705 put_unaligned_le16(io_request->index, &request->request_id);
5744 rc = pqi_build_aio_sg_list(ctrl_info, request, scmd, io_request);
5746 pqi_free_io_request(io_request);
5750 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
5761 struct pqi_io_request *io_request;
5764 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5765 if (!io_request)
5768 io_request->io_complete_callback = pqi_aio_io_complete;
5769 io_request->scmd = scmd;
5770 io_request->raid_bypass = true;
5772 r1_request = io_request->iu;
5785 put_unaligned_le16(io_request->index, &r1_request->request_id);
5805 rc = pqi_build_aio_r1_sg_list(ctrl_info, r1_request, scmd, io_request);
5807 pqi_free_io_request(io_request);
5811 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
5822 struct pqi_io_request *io_request;
5825 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5826 if (!io_request)
5828 io_request->io_complete_callback = pqi_aio_io_complete;
5829 io_request->scmd = scmd;
5830 io_request->raid_bypass = true;
5832 r56_request = io_request->iu;
5851 put_unaligned_le16(io_request->index, &r56_request->request_id);
5872 rc = pqi_build_aio_r56_sg_list(ctrl_info, r56_request, scmd, io_request);
5874 pqi_free_io_request(io_request);
5878 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
6085 struct pqi_io_request *io_request;
6093 list_for_each_entry(io_request, &queue_group->request_list[path], request_list_entry)
6173 struct pqi_io_request *io_request;
6185 list_for_each_entry_safe(io_request, next,
6189 scmd = io_request->scmd;
6200 list_del(&io_request->request_list_entry);
6202 pqi_free_io_request(io_request);
6253 static void pqi_lun_reset_complete(struct pqi_io_request *io_request,
6300 struct pqi_io_request *io_request;
6304 io_request = pqi_alloc_io_request(ctrl_info, NULL);
6305 io_request->io_complete_callback = pqi_lun_reset_complete;
6306 io_request->context = &wait;
6308 request = io_request->iu;
6314 put_unaligned_le16(io_request->index, &request->request_id);
6324 io_request);
6328 rc = io_request->status;
6330 pqi_free_io_request(io_request);
8990 struct pqi_io_request *io_request;
8995 io_request = &ctrl_info->io_request_pool[i];
8996 if (atomic_read(&io_request->refcount) == 0)
8999 scmd = io_request->scmd;
9003 pqi_free_io_request(io_request);
9009 io_request->status = -ENXIO;
9010 io_request->error_info =
9014 io_request->io_complete_callback(io_request,
9015 io_request->context);
9200 struct pqi_io_request *io_request;
9204 io_request = &ctrl_info->io_request_pool[i];
9205 if (atomic_read(&io_request->refcount) == 0)
9207 scmd = io_request->scmd;