Lines Matching refs:cdw

695 cfiscsi_handle_data_segment(struct icl_pdu *request, struct cfiscsi_data_wait *cdw)
717 io = cdw->cdw_ctl_io;
771 * times for one SCSI command; the cdw structure holds state for the
775 KASSERT(cdw->cdw_sg_index < ctl_sg_count,
776 ("cdw->cdw_sg_index >= ctl_sg_count"));
777 if (cdw->cdw_sg_len == 0) {
778 cdw->cdw_sg_addr = ctl_sglist[cdw->cdw_sg_index].addr;
779 cdw->cdw_sg_len = ctl_sglist[cdw->cdw_sg_index].len;
783 if (copy_len > cdw->cdw_sg_len)
784 copy_len = cdw->cdw_sg_len;
786 icl_pdu_get_data(request, off, cdw->cdw_sg_addr, copy_len);
787 cdw->cdw_sg_addr += copy_len;
788 cdw->cdw_sg_len -= copy_len;
792 if (cdw->cdw_sg_len == 0) {
796 if (cdw->cdw_sg_index == ctl_sg_count - 1) {
802 cdw->cdw_sg_index++;
834 if (io->scsiio.ext_data_filled == cdw->cdw_r2t_end &&
844 if (io->scsiio.ext_data_filled != cdw->cdw_r2t_end &&
852 cdw->cdw_r2t_end);
865 if (io->scsiio.ext_data_filled == cdw->cdw_r2t_end) {
868 "transfer tag 0x%x", cdw->cdw_target_transfer_tag);
882 struct cfiscsi_data_wait *cdw = NULL;
890 TAILQ_FOREACH(cdw, &cs->cs_waiting_for_data_out, cdw_next) {
896 cdw->cdw_target_transfer_tag, cdw->cdw_initiator_task_tag));
899 cdw->cdw_target_transfer_tag)
903 if (cdw == NULL) {
912 if (cdw->cdw_datasn != ntohl(bhsdo->bhsdo_datasn)) {
915 ntohl(bhsdo->bhsdo_datasn), cdw->cdw_datasn);
920 cdw->cdw_datasn++;
922 io = cdw->cdw_ctl_io;
926 done = cfiscsi_handle_data_segment(request, cdw);
929 TAILQ_REMOVE(&cs->cs_waiting_for_data_out, cdw, cdw_next);
931 done = (io->scsiio.ext_data_filled != cdw->cdw_r2t_end ||
933 uma_zfree(cfiscsi_data_wait_zone, cdw);
1074 struct cfiscsi_data_wait *cdw;
1100 while ((cdw = TAILQ_FIRST(&cs->cs_waiting_for_data_out)) != NULL) {
1101 TAILQ_REMOVE(&cs->cs_waiting_for_data_out, cdw, cdw_next);
1108 cdw->cdw_ctl_io->scsiio.io_hdr.port_status = 42;
1109 cdw->cdw_ctl_io->scsiio.be_move_done(cdw->cdw_ctl_io);
1110 uma_zfree(cfiscsi_data_wait_zone, cdw);
2540 struct cfiscsi_data_wait *cdw;
2580 cdw = uma_zalloc(cfiscsi_data_wait_zone, M_NOWAIT | M_ZERO);
2581 if (cdw == NULL) {
2589 cdw->cdw_ctl_io = io;
2590 cdw->cdw_target_transfer_tag = target_transfer_tag;
2591 cdw->cdw_initiator_task_tag = bhssc->bhssc_initiator_task_tag;
2592 cdw->cdw_r2t_end = io->scsiio.kern_data_len;
2593 cdw->cdw_datasn = 0;
2603 cdw->cdw_sg_index = 0;
2604 cdw->cdw_sg_addr = ctl_sglist[cdw->cdw_sg_index].addr;
2605 cdw->cdw_sg_len = ctl_sglist[cdw->cdw_sg_index].len;
2608 if (r2t_off >= cdw->cdw_sg_len) {
2609 r2t_off -= cdw->cdw_sg_len;
2610 cdw->cdw_sg_index++;
2611 cdw->cdw_sg_addr = ctl_sglist[cdw->cdw_sg_index].addr;
2612 cdw->cdw_sg_len = ctl_sglist[cdw->cdw_sg_index].len;
2615 cdw->cdw_sg_addr += r2t_off;
2616 cdw->cdw_sg_len -= r2t_off;
2623 done = cfiscsi_handle_data_segment(request, cdw);
2625 uma_zfree(cfiscsi_data_wait_zone, cdw);
2634 cdw->cdw_r2t_end = io->scsiio.ext_data_filled + r2t_len;
2637 TAILQ_INSERT_TAIL(&cs->cs_waiting_for_data_out, cdw, cdw_next);
2705 struct cfiscsi_data_wait *cdw;
2722 TAILQ_FOREACH(cdw, &cs->cs_waiting_for_data_out, cdw_next)
2724 cdw->cdw_initiator_task_tag, ("dangling cdw"));
2793 struct cfiscsi_data_wait *cdw, *tmpcdw;
2815 TAILQ_FOREACH_SAFE(cdw,
2818 cdw->cdw_initiator_task_tag)
2826 cdw, cdw_next);
2827 cdw->cdw_ctl_io->scsiio.be_move_done(cdw->cdw_ctl_io);
2828 uma_zfree(cfiscsi_data_wait_zone, cdw);