assert(scsi_cmnd);
BUG_ON(!scsi_cmnd);
static void data_out_end(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd){	struct iscsi_data *req = (struct iscsi_data *) &cmnd->pdu.bhs;	struct iscsi_cmnd *scsi_cmnd;	u32 offset;	assert(cmnd);	scsi_cmnd = cmnd->req;	assert(scsi_cmnd);	if (conn->read_overflow) {		eprintk("%x %u\n", cmnd_itt(cmnd), conn->read_overflow);/* 		assert(scsi_cmnd->tio); */		offset = be32_to_cpu(req->offset);		offset += cmnd->pdu.datasize - conn->read_overflow;		if (cmnd_recv_pdu(conn, scsi_cmnd->tc, offset, conn->read_overflow) < 0)			assert(0);		return;	}	if (req->ttt == cpu_to_be32(ISCSI_RESERVED_TAG)) {		if (req->flags & ISCSI_FLAG_CMD_FINAL) {			scsi_cmnd->is_unsolicited_data = 0;			if (!cmnd_pending(scsi_cmnd))				scsi_cmnd_exec(scsi_cmnd);		}	} else {		/* TODO : proper error handling */		if (!(req->flags & ISCSI_FLAG_CMD_FINAL) &&		    scsi_cmnd->r2t_length == 0)			eprintk("initiator error %x\n", cmnd_itt(scsi_cmnd));		if (!(req->flags & ISCSI_FLAG_CMD_FINAL))			goto out;		scsi_cmnd->outstanding_r2t--;		if (scsi_cmnd->r2t_length == 0)			assert(list_empty(&scsi_cmnd->pdu_list));		scsi_cmnd_exec(scsi_cmnd);	}out:	iscsi_cmnd_remove(cmnd);	return;}