Lines Matching refs:raid_io
606 raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status status)
608 struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(raid_io);
611 spdk_trace_record(TRACE_BDEV_RAID_IO_DONE, 0, 0, (uintptr_t)raid_io, (uintptr_t)bdev_io);
613 if (raid_io->split.offset != RAID_OFFSET_BLOCKS_INVALID) {
614 struct iovec *split_iov = raid_io->split.iov;
615 const struct iovec *split_iov_orig = &raid_io->split.iov_copy;
621 if (raid_io->split.offset != 0) {
622 raid_io->offset_blocks = bdev_io->u.bdev.offset_blocks;
623 raid_io->md_buf = bdev_io->u.bdev.md_buf;
626 raid_io->num_blocks = raid_io->split.offset;
627 raid_io->iovcnt = raid_io->iovs - bdev_io->u.bdev.iovs;
628 raid_io->iovs = bdev_io->u.bdev.iovs;
630 raid_io->iovcnt++;
635 raid_io->split.offset = 0;
636 raid_io->base_bdev_io_submitted = 0;
637 raid_io->raid_ch = raid_io->raid_ch->process.ch_processed;
639 raid_io->raid_bdev->module->submit_rw_request(raid_io);
644 raid_io->num_blocks = bdev_io->u.bdev.num_blocks;
645 raid_io->iovcnt = bdev_io->u.bdev.iovcnt;
646 raid_io->iovs = bdev_io->u.bdev.iovs;
652 if (spdk_unlikely(raid_io->completion_cb != NULL)) {
653 raid_io->completion_cb(raid_io, status);
674 * base bdev IOs and complete the raid_io if this is the final expected IO.
675 * The caller should first set raid_io->base_bdev_io_remaining. This function
677 * complete the raid_io if the counter reaches 0. The caller is free to
681 * raid_io - pointer to raid_bdev_io
682 * completed - the part of the raid_io that has been completed
685 * true - if the raid_io is completed
689 raid_bdev_io_complete_part(struct raid_bdev_io *raid_io, uint64_t completed,
692 assert(raid_io->base_bdev_io_remaining >= completed);
693 raid_io->base_bdev_io_remaining -= completed;
695 if (status != raid_io->base_bdev_io_status_default) {
696 raid_io->base_bdev_io_status = status;
699 if (raid_io->base_bdev_io_remaining == 0) {
700 raid_bdev_io_complete(raid_io, raid_io->base_bdev_io_status);
712 * raid_io - pointer to raid_bdev_io
720 raid_bdev_queue_io_wait(struct raid_bdev_io *raid_io, struct spdk_bdev *bdev,
723 raid_io->waitq_entry.bdev = bdev;
724 raid_io->waitq_entry.cb_fn = cb_fn;
725 raid_io->waitq_entry.cb_arg = raid_io;
726 spdk_bdev_queue_io_wait(bdev, ch, &raid_io->waitq_entry);
732 struct raid_bdev_io *raid_io = cb_arg;
736 raid_bdev_io_complete_part(raid_io, 1, success ?
741 static void raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io);
746 struct raid_bdev_io *raid_io = _raid_io;
748 raid_bdev_submit_reset_request(raid_io);
757 * raid_io
762 raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io)
770 raid_bdev = raid_io->raid_bdev;
772 if (raid_io->base_bdev_io_remaining == 0) {
773 raid_io->base_bdev_io_remaining = raid_bdev->num_base_bdevs;
776 for (i = raid_io->base_bdev_io_submitted; i < raid_bdev->num_base_bdevs; i++) {
778 base_ch = raid_io->raid_ch->base_channel[i];
780 raid_io->base_bdev_io_submitted++;
781 raid_bdev_io_complete_part(raid_io, 1, SPDK_BDEV_IO_STATUS_SUCCESS);
785 raid_base_bdev_reset_complete, raid_io);
787 raid_io->base_bdev_io_submitted++;
789 raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
795 raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED);
802 raid_bdev_io_split(struct raid_bdev_io *raid_io, uint64_t split_offset)
804 struct raid_bdev *raid_bdev = raid_io->raid_bdev;
809 assert(raid_io->split.offset == RAID_OFFSET_BLOCKS_INVALID);
810 raid_io->split.offset = split_offset;
812 raid_io->offset_blocks += split_offset;
813 raid_io->num_blocks -= split_offset;
814 if (raid_io->md_buf != NULL) {
815 raid_io->md_buf += (split_offset * raid_bdev->bdev.md_len);
818 for (i = 0; i < raid_io->iovcnt; i++) {
819 struct iovec *iov = &raid_io->iovs[i];
823 raid_io->split.iov = NULL;
825 raid_io->split.iov = iov;
826 raid_io->split.iov_copy = *iov;
830 raid_io->iovs += i;
831 raid_io->iovcnt -= i;
840 raid_bdev_submit_rw_request(struct raid_bdev_io *raid_io)
842 struct raid_bdev_io_channel *raid_ch = raid_io->raid_ch;
845 uint64_t offset_begin = raid_io->offset_blocks;
846 uint64_t offset_end = offset_begin + raid_io->num_blocks;
861 raid_bdev_io_split(raid_io, raid_ch->process.offset - offset_begin);
865 raid_io->raid_ch = raid_ch->process.ch_processed;
869 raid_io->raid_bdev->module->submit_rw_request(raid_io);
886 struct raid_bdev_io *raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx;
889 raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED);
893 raid_io->iovs = bdev_io->u.bdev.iovs;
894 raid_io->iovcnt = bdev_io->u.bdev.iovcnt;
895 raid_io->md_buf = bdev_io->u.bdev.md_buf;
897 raid_bdev_submit_rw_request(raid_io);
901 raid_bdev_io_init(struct raid_bdev_io *raid_io, struct raid_bdev_io_channel *raid_ch,
909 raid_io->type = type;
910 raid_io->offset_blocks = offset_blocks;
911 raid_io->num_blocks = num_blocks;
912 raid_io->iovs = iovs;
913 raid_io->iovcnt = iovcnt;
914 raid_io->memory_domain = memory_domain;
915 raid_io->memory_domain_ctx = memory_domain_ctx;
916 raid_io->md_buf = md_buf;
918 raid_io->raid_bdev = raid_bdev;
919 raid_io->raid_ch = raid_ch;
920 raid_io->base_bdev_io_remaining = 0;
921 raid_io->base_bdev_io_submitted = 0;
922 raid_io->completion_cb = NULL;
923 raid_io->split.offset = RAID_OFFSET_BLOCKS_INVALID;
925 raid_bdev_io_set_default_status(raid_io, SPDK_BDEV_IO_STATUS_SUCCESS);
942 struct raid_bdev_io *raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx;
944 raid_bdev_io_init(raid_io, spdk_io_channel_get_ctx(ch), bdev_io->type,
949 spdk_trace_record(TRACE_BDEV_RAID_IO_START, 0, 0, (uintptr_t)raid_io, (uintptr_t)bdev_io);
957 raid_bdev_submit_rw_request(raid_io);
961 raid_bdev_submit_reset_request(raid_io);
966 if (raid_io->raid_bdev->process != NULL) {
968 raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED);
971 raid_io->raid_bdev->module->submit_null_payload_request(raid_io);
976 raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED);