FreeBSD/sys/cam/ctl/ctl.c
/*
 * The DMA to the remote side is done, now we need to tell the other side
 * we're done so it can continue with its data movement.
 */
The DMA to the remote side is done, now we need to tell the other side
we're done so it can continue with its data movement.
The DMA to the remote side is done now we need to tell the other side we ' re done so it can continue with its data movement .
static void
ctl_datamove_remote_write_cb(struct ctl_ha_dt_req *rq)
{
	union ctl_io *io;
	uint32_t i;
	io = rq->context;
	if (rq->ret != CTL_HA_STATUS_SUCCESS) {
		printf("%s: ISC DMA write failed with error %d", __func__,
		       rq->ret);
		ctl_set_internal_failure(&io->scsiio,
					  1,
					  rq->ret);
	}
	ctl_dt_req_free(rq);
	for (i = 0; i < io->scsiio.kern_sg_entries; i++)
		free(io->io_hdr.local_sglist[i].addr, M_CTL);
	free(io->io_hdr.remote_sglist, M_CTL);
	io->io_hdr.remote_sglist = NULL;
	io->io_hdr.local_sglist = NULL;
	ctl_send_datamove_done(io,  0);
}
static void ctl_datamove_remote_write_cb ( struct ctl_ha_dt_req * rq ) { union ctl_io * io ; uint32_t i ; io = rq -> context ; if ( rq -> ret != CTL_HA_STATUS_SUCCESS ) { printf ( " " , __func__ , rq -> ret ) ; ctl_set_internal_failure ( & io -> scsiio , 1 , rq -> ret ) ; } ctl_dt_req_free ( rq ) ; for ( i = 0 ; i < io -> scsiio . kern_sg_entries ; i ++ ) free ( io -> io_hdr . local_sglist [ i ] . addr , M_CTL ) ; free ( io -> io_hdr . remote_sglist , M_CTL ) ; io -> io_hdr . remote_sglist = NULL ; io -> io_hdr . local_sglist = NULL ; ctl_send_datamove_done ( io , 0 ) ; }
The DMA to the remote side is done, now we need to tell the other side
 we're done so it can continue with its data movement.
The DMA to the remote side is done now we need to tell the other side we ' re done so it can continue with its data movement .
/*sks_valid*/ /*retry_count*/ /*
	 * The data is in local and remote memory, so now we need to send
	 * status (good or back) back to the other side.
	 */ /*have_lock*/