struct iscsi_cmnd *isert_alloc_login_rsp_pdu(struct iscsi_conn *iscsi_conn) { struct isert_connection *isert_conn = container_of(iscsi_conn, struct isert_connection, iscsi); struct isert_cmnd *isert_pdu = isert_conn->login_rsp_pdu; isert_tx_pdu_init(isert_pdu, isert_conn); return &isert_pdu->iscsi; }
struct isert_cmnd *isert_tx_pdu_alloc(struct isert_connection *isert_conn, size_t size) { struct isert_cmnd *pdu = NULL; int err; TRACE_ENTRY(); pdu = isert_pdu_alloc(); if (unlikely(!pdu)) { pr_err("Failed to alloc pdu\n"); goto out; } err = isert_alloc_for_rdma(pdu, 4, isert_conn); if (unlikely(err)) { pr_err("Failed to alloc sge and wr for tx pdu\n"); goto out; } err = isert_buf_alloc_data_buf(isert_conn->isert_dev->ib_dev, &pdu->buf, size, DMA_TO_DEVICE); if (unlikely(err)) { pr_err("Failed to alloc tx pdu buf sz:%zd\n", size); goto buf_alloc_failed; } err = isert_pdu_tx_buf_init(pdu, isert_conn); if (unlikely(err < 0)) { pr_err("Failed to init tx pdu wr:%p size:%zd err:%d\n", &pdu->wr, size, err); goto buf_init_failed; } isert_tx_pdu_init(pdu, isert_conn); isert_pdu_set_hdr_plain(pdu); list_add_tail(&pdu->pool_node, &isert_conn->tx_free_list); goto out; buf_init_failed: isert_buf_release(&pdu->buf); buf_alloc_failed: isert_pdu_kfree(pdu); pdu = NULL; out: TRACE_EXIT(); return pdu; }