Home | History | Annotate | Download | only in iscsi

Lines Matching refs:pdu

151 	pdu_t *pdu = NULL;
202 /* Copy PDU contents (PDUs are bound to connection) */
203 if ((pdu = get_pdu(conn, TRUE)) == NULL) {
211 /* adjust CCB and clone PDU for new connection */
216 *pdu = *opdu;
219 pdu->pdu_connection = conn;
222 pdu->pdu_save_uio.uio_iov = pdu->pdu_io_vec;
223 pdu->pdu_save_iovec [0].iov_base = &pdu->pdu_hdr;
225 if (conn->c_DataDigest && pdu->pdu_save_uio.uio_iovcnt > 1) {
226 if (pdu->pdu_save_iovec [2].iov_base == NULL) {
227 pdu->pdu_save_iovec [2].iov_base = &pdu->pdu_data_digest;
228 pdu->pdu_save_uio.uio_iovcnt = 3;
230 pdu->pdu_save_iovec [3].iov_base = &pdu->pdu_data_digest;
231 pdu->pdu_save_uio.uio_iovcnt = 4;
234 pdu->pdu_save_iovec [0].iov_len =
237 /* link new PDU into old CCB */
238 ccb->ccb_pdu_waiting = pdu;
244 DEBC(conn, 1, ("CCB %p: Copied PDU %p to %p\n",
245 ccb, opdu, pdu));
247 /* kill temp pointer that is now referenced by the new PDU */
250 /* and free the old PDU */
296 pdu = ccb->ccb_pdu_waiting;
297 sn = get_sernum(sess, pdu);
303 pdu->pdu_hdr.pduh_p.command.CmdSN = htonl(ccb->ccb_CmdSN);
331 pdu_t *pdu;
343 (pdu = TAILQ_FIRST(&conn->c_pdus_to_send)) != NULL) {
344 TAILQ_REMOVE(&conn->c_pdus_to_send, pdu, pdu_send_chain);
345 pdu->pdu_flags &= ~PDUF_INQUEUE;
350 pdu->pdu_hdr.pduh_p.command.ExpStatSN = htonl(conn->c_StatSN_buf.ExpSN);
353 pdu->pdu_hdr.pduh_HeaderDigest = gen_digest(&pdu->pdu_hdr, BHS_SIZE);
355 DEBC(conn, 99, ("Transmitting PDU CmdSN = %u, ExpStatSN = %u\n",
356 ntohl(pdu->pdu_hdr.pduh_p.command.CmdSN),
357 ntohl(pdu->pdu_hdr.pduh_p.command.ExpStatSN)));
358 my_soo_write(conn, &pdu->pdu_uio);
361 pdisp = pdu->pdu_disp;
363 pdu->pdu_flags &= ~PDUF_BUSY;
366 free_pdu(pdu);
408 while ((pdu = TAILQ_FIRST(&conn->c_pdus_to_send)) != NULL) {
409 TAILQ_REMOVE(&conn->c_pdus_to_send, pdu, pdu_send_chain);
410 pdu->pdu_flags &= ~(PDUF_INQUEUE | PDUF_BUSY);
413 if (pdu->pdu_owner == NULL ||
414 pdu->pdu_owner->ccb_pdu_waiting != pdu) {
415 free_pdu(pdu);
446 /* wake up anyone waiting for a PDU */
469 * Enqueue a PDU to be sent, and handle its disposition as well as
476 * pdu The PDU
477 * pdisp The PDU's disposition
481 send_pdu(ccb_t *ccb, pdu_t *pdu, ccb_disp_t cdisp, pdu_disp_t pdisp)
483 connection_t *conn = pdu->pdu_connection;
488 pdu->pdu_hdr.pduh_InitiatorTaskTag = ccb->ccb_ITT;
489 pdu->pdu_owner = ccb;
494 pdu->pdu_disp = pdisp;
496 DEBC(conn, 10, ("Send_pdu: CmdSN=%u ExpStatSN~%u ccb=%p, pdu=%p\n",
497 ntohl(pdu->pdu_hdr.pduh_p.command.CmdSN),
499 ccb, pdu));
505 ccb->ccb_pdu_waiting = pdu;
508 pdu->pdu_save_uio = pdu->pdu_uio;
509 memcpy(pdu->pdu_save_iovec, pdu->pdu_io_vec, sizeof(pdu->pdu_save_iovec));
511 pdu->pdu_flags |= PDUF_BUSY;
514 pdu->pdu_flags |= PDUF_INQUEUE;
516 if (pdu->pdu_flags & PDUF_PRIORITY)
517 TAILQ_INSERT_HEAD(&conn->c_pdus_to_send, pdu, pdu_send_chain);
519 TAILQ_INSERT_TAIL(&conn->c_pdus_to_send, pdu, pdu_send_chain);
549 * Re-Enqueue a PDU that has apparently gotten lost.
559 pdu_t *pdu = ccb->ccb_pdu_waiting;
562 if (pdu == NULL || (pdu->pdu_flags & PDUF_BUSY)) {
566 pdu->pdu_flags |= PDUF_BUSY;
570 pdu->pdu_uio = pdu->pdu_save_uio;
571 memcpy(pdu->pdu_io_vec, pdu->pdu_save_iovec, sizeof(pdu->pdu_io_vec));
573 DEBC(conn, 8, ("ReSend_pdu: CmdSN=%u ExpStatSN~%u ccb=%p, pdu=%p\n",
574 ntohl(pdu->pdu_hdr.pduh_p.command.CmdSN),
576 ccb, pdu));
580 pdu->pdu_flags |= PDUF_INQUEUE;
582 if (pdu->pdu_flags & PDUF_PRIORITY) {
583 TAILQ_INSERT_HEAD(&conn->c_pdus_to_send, pdu, pdu_send_chain);
585 TAILQ_INSERT_TAIL(&conn->c_pdus_to_send, pdu, pdu_send_chain);
601 * pdu The PDU
608 setup_tx_uio(pdu_t *pdu, uint32_t dsl, void *data, bool read)
613 connection_t *conn = pdu->pdu_connection;
619 hton3(dsl, pdu->pdu_hdr.pduh_DataSegmentLength);
623 pdu->pdu_io_vec[0].iov_base = &pdu->pdu_hdr;
624 pdu->pdu_io_vec[0].iov_len = hlen;
626 uio = &pdu->pdu_uio;
628 uio->uio_iov = pdu->pdu_io_vec;
636 pdu->pdu_io_vec[1].iov_base = data;
637 pdu->pdu_io_vec[1].iov_len = dsl;
645 pdu->pdu_io_vec[i].iov_base = pad_bytes;
646 pdu->pdu_io_vec[i].iov_len = pad;
651 pdu->pdu_data_digest = gen_digest_2(data, dsl, pad_bytes, pad);
653 pdu->pdu_io_vec[i].iov_base = &pdu->pdu_data_digest;
654 pdu->pdu_io_vec[i].iov_len = 4;
662 * Initialize the login PDU.
667 * pdu The PDU
708 * rx_pdu The received login response PDU
802 * Initialize the text PDU.
807 * ppdu The transmit PDU
808 * rx_pdu The received PDU if this is an unsolicited negotiation
840 * rx_pdu The received login/text response PDU
875 pdu_t *pdu;
881 pdu = get_pdu(conn, TRUE);
882 if (pdu == NULL) {
889 free_pdu(pdu);
893 init_text_pdu(conn, ccb, pdu, NULL);
894 setup_tx_uio(pdu, 0, NULL, FALSE);
895 send_pdu(ccb, pdu, CCBDISP_FREE, PDUDISP_WAIT);
905 * rx_pdu The received text response PDU
967 pdu_t *pdu;
981 pdu = get_pdu(conn, TRUE);
982 if (pdu == NULL) {
989 if ((rc = assemble_send_targets(pdu, key)) != 0) {
991 free_pdu(pdu);
995 init_text_pdu(conn, ccb, pdu, NULL);
997 setup_tx_uio(pdu, pdu->pdu_temp_data_len, pdu->pdu_temp_data, FALSE);
998 send_pdu(ccb, pdu, CCBDISP_WAIT, PDUDISP_WAIT);
1018 * rx_pdu The received Nop-In PDU
1046 DEBOUT(("Can't get PDU in send_nop_out\n"));
1127 * rx_pdu The received data in PDU
1199 pdu_t *pdu;
1207 pdu = get_pdu(conn, TRUE);
1208 if (pdu == NULL) {
1213 if ((rc = assemble_login_parameters(conn, ccb, pdu)) <= 0) {
1214 init_login_pdu(conn, ccb, pdu, !rc);
1215 setup_tx_uio(pdu, pdu->pdu_temp_data_len, pdu->pdu_temp_data, FALSE);
1216 send_pdu(ccb, pdu, CCBDISP_WAIT, PDUDISP_FREE);
1219 free_pdu(pdu);
1324 DEBC(conn, 0, ("send_task_management, ref_ccb=%p, xs=%p, term=%d. No PDU\n",
1366 * rx_pdu The received R2T PDU (NULL if unsolicited)
1368 * waitok Whether it's OK to wait for an available PDU or not
1395 DEBC(conn, 5, ("No PDU in send_data_out\n"));
1468 DEBOUT(("No PDU for send_command, ccb = %p\n",ccb));