Lines Matching +full:libiscsi +full:- +full:dev
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * iSCSI Initiator over TCP/IP Data-Path
7 * Copyright (C) 2005 - 2006 Mike Christie
9 * maintained by open-iscsi@googlegroups.com
30 #include <linux/backing-dev.h>
45 MODULE_DESCRIPTION("iSCSI/TCP data-path");
72 &(_conn)->cls_conn->dev, \
78 * iscsi_sw_tcp_recv - TCP receive in sendfile fashion
82 * @len: skb->len - offset
87 struct iscsi_conn *conn = rd_desc->arg.data; in iscsi_sw_tcp_recv()
91 ISCSI_SW_TCP_DBG(conn, "in %d bytes\n", skb->len - offset); in iscsi_sw_tcp_recv()
101 skb->len - offset, status); in iscsi_sw_tcp_recv()
106 * iscsi_sw_sk_state_check - check socket state
117 struct iscsi_conn *conn = sk->sk_user_data; in iscsi_sw_sk_state_check()
119 if ((sk->sk_state == TCP_CLOSE_WAIT || sk->sk_state == TCP_CLOSE) && in iscsi_sw_sk_state_check()
120 (conn->session->state != ISCSI_STATE_LOGGING_OUT) && in iscsi_sw_sk_state_check()
121 !atomic_read(&sk->sk_rmem_alloc)) { in iscsi_sw_sk_state_check()
124 return -ECONNRESET; in iscsi_sw_sk_state_check()
131 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_recv_data()
132 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_recv_data()
133 struct sock *sk = tcp_sw_conn->sock->sk; in iscsi_sw_tcp_recv_data()
149 iscsi_tcp_segment_unmap(&tcp_conn->in.segment); in iscsi_sw_tcp_recv_data()
158 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_recv_data_work()
159 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_recv_data_work()
160 struct sock *sk = tcp_sw_conn->sock->sk; in iscsi_sw_tcp_recv_data_work()
175 read_lock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_data_ready()
176 conn = sk->sk_user_data; in iscsi_sw_tcp_data_ready()
178 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_data_ready()
181 tcp_conn = conn->dd_data; in iscsi_sw_tcp_data_ready()
182 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_data_ready()
184 if (tcp_sw_conn->queue_recv) in iscsi_sw_tcp_data_ready()
188 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_data_ready()
198 read_lock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_state_change()
199 conn = sk->sk_user_data; in iscsi_sw_tcp_state_change()
201 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_state_change()
207 tcp_conn = conn->dd_data; in iscsi_sw_tcp_state_change()
208 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_state_change()
209 old_state_change = tcp_sw_conn->old_state_change; in iscsi_sw_tcp_state_change()
211 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_state_change()
217 * iscsi_sw_tcp_write_space - Called when more output buffer space is available
227 read_lock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_write_space()
228 conn = sk->sk_user_data; in iscsi_sw_tcp_write_space()
230 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_write_space()
234 tcp_conn = conn->dd_data; in iscsi_sw_tcp_write_space()
235 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_write_space()
236 old_write_space = tcp_sw_conn->old_write_space; in iscsi_sw_tcp_write_space()
237 read_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_write_space()
247 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_set_callbacks()
248 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_set_callbacks()
249 struct sock *sk = tcp_sw_conn->sock->sk; in iscsi_sw_tcp_conn_set_callbacks()
252 write_lock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_conn_set_callbacks()
253 sk->sk_user_data = conn; in iscsi_sw_tcp_conn_set_callbacks()
254 tcp_sw_conn->old_data_ready = sk->sk_data_ready; in iscsi_sw_tcp_conn_set_callbacks()
255 tcp_sw_conn->old_state_change = sk->sk_state_change; in iscsi_sw_tcp_conn_set_callbacks()
256 tcp_sw_conn->old_write_space = sk->sk_write_space; in iscsi_sw_tcp_conn_set_callbacks()
257 sk->sk_data_ready = iscsi_sw_tcp_data_ready; in iscsi_sw_tcp_conn_set_callbacks()
258 sk->sk_state_change = iscsi_sw_tcp_state_change; in iscsi_sw_tcp_conn_set_callbacks()
259 sk->sk_write_space = iscsi_sw_tcp_write_space; in iscsi_sw_tcp_conn_set_callbacks()
260 write_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_conn_set_callbacks()
266 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_restore_callbacks()
267 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_restore_callbacks()
268 struct sock *sk = tcp_sw_conn->sock->sk; in iscsi_sw_tcp_conn_restore_callbacks()
271 write_lock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_conn_restore_callbacks()
272 sk->sk_user_data = NULL; in iscsi_sw_tcp_conn_restore_callbacks()
273 sk->sk_data_ready = tcp_sw_conn->old_data_ready; in iscsi_sw_tcp_conn_restore_callbacks()
274 sk->sk_state_change = tcp_sw_conn->old_state_change; in iscsi_sw_tcp_conn_restore_callbacks()
275 sk->sk_write_space = tcp_sw_conn->old_write_space; in iscsi_sw_tcp_conn_restore_callbacks()
276 sk->sk_no_check_tx = 0; in iscsi_sw_tcp_conn_restore_callbacks()
277 write_unlock_bh(&sk->sk_callback_lock); in iscsi_sw_tcp_conn_restore_callbacks()
281 * iscsi_sw_tcp_xmit_segment - transmit segment
296 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_xmit_segment()
297 struct socket *sk = tcp_sw_conn->sock; in iscsi_sw_tcp_xmit_segment()
308 offset = segment->copied; in iscsi_sw_tcp_xmit_segment()
309 copy = segment->size - offset; in iscsi_sw_tcp_xmit_segment()
311 if (segment->total_copied + segment->size < segment->total_size) in iscsi_sw_tcp_xmit_segment()
314 if (tcp_sw_conn->queue_recv) in iscsi_sw_tcp_xmit_segment()
317 if (!segment->data) { in iscsi_sw_tcp_xmit_segment()
318 if (!tcp_conn->iscsi_conn->datadgst_en) in iscsi_sw_tcp_xmit_segment()
320 sg = segment->sg; in iscsi_sw_tcp_xmit_segment()
321 offset += segment->sg_offset + sg->offset; in iscsi_sw_tcp_xmit_segment()
324 bvec_set_virt(&bv, segment->data + offset, copy); in iscsi_sw_tcp_xmit_segment()
339 * iscsi_sw_tcp_xmit - TCP transmit
344 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_xmit()
345 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_xmit()
346 struct iscsi_segment *segment = &tcp_sw_conn->out.segment; in iscsi_sw_tcp_xmit()
354 * is getting stopped. libiscsi will know so propagate err in iscsi_sw_tcp_xmit()
357 if (rc == -EAGAIN) in iscsi_sw_tcp_xmit()
367 if (segment->total_copied >= segment->total_size) { in iscsi_sw_tcp_xmit()
368 if (segment->done != NULL) { in iscsi_sw_tcp_xmit()
369 rc = segment->done(tcp_conn, segment); in iscsi_sw_tcp_xmit()
378 conn->txdata_octets += consumed; in iscsi_sw_tcp_xmit()
386 return -EIO; in iscsi_sw_tcp_xmit()
390 * iscsi_sw_tcp_xmit_qlen - return the number of bytes queued for xmit
395 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_xmit_qlen()
396 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_xmit_qlen()
397 struct iscsi_segment *segment = &tcp_sw_conn->out.segment; in iscsi_sw_tcp_xmit_qlen()
399 return segment->total_copied - segment->total_size; in iscsi_sw_tcp_xmit_qlen()
404 struct iscsi_conn *conn = task->conn; in iscsi_sw_tcp_pdu_xmit()
406 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_pdu_xmit()
407 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_pdu_xmit()
410 if (!tcp_sw_conn->sock) { in iscsi_sw_tcp_pdu_xmit()
413 return -EINVAL; in iscsi_sw_tcp_pdu_xmit()
421 rc = -EAGAIN; in iscsi_sw_tcp_pdu_xmit()
440 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_send_hdr_done()
442 tcp_sw_conn->out.segment = tcp_sw_conn->out.data_segment; in iscsi_sw_tcp_send_hdr_done()
443 ISCSI_SW_TCP_DBG(tcp_conn->iscsi_conn, in iscsi_sw_tcp_send_hdr_done()
445 tcp_sw_conn->out.segment.size, in iscsi_sw_tcp_send_hdr_done()
446 tcp_sw_conn->out.segment.total_size); in iscsi_sw_tcp_send_hdr_done()
453 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_send_hdr_prep()
454 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_send_hdr_prep()
456 ISCSI_SW_TCP_DBG(conn, "%s\n", conn->hdrdgst_en ? in iscsi_sw_tcp_send_hdr_prep()
459 /* Clear the data segment - needs to be filled in by the in iscsi_sw_tcp_send_hdr_prep()
461 memset(&tcp_sw_conn->out.data_segment, 0, in iscsi_sw_tcp_send_hdr_prep()
469 if (conn->hdrdgst_en) { in iscsi_sw_tcp_send_hdr_prep()
477 tcp_sw_conn->out.hdr = hdr; in iscsi_sw_tcp_send_hdr_prep()
479 iscsi_segment_init_linear(&tcp_sw_conn->out.segment, hdr, hdrlen, in iscsi_sw_tcp_send_hdr_prep()
493 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_send_data_prep()
494 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_send_data_prep()
499 conn->datadgst_en ? in iscsi_sw_tcp_send_data_prep()
504 hdr_spec_len = ntoh24(tcp_sw_conn->out.hdr->dlength); in iscsi_sw_tcp_send_data_prep()
507 if (conn->datadgst_en) in iscsi_sw_tcp_send_data_prep()
508 tx_crcp = &tcp_sw_conn->tx_crc; in iscsi_sw_tcp_send_data_prep()
510 return iscsi_segment_seek_sg(&tcp_sw_conn->out.data_segment, in iscsi_sw_tcp_send_data_prep()
518 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_send_linear_data_prep()
519 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_send_linear_data_prep()
523 ISCSI_SW_TCP_DBG(conn, "datalen=%zd %s\n", len, conn->datadgst_en ? in iscsi_sw_tcp_send_linear_data_prep()
528 hdr_spec_len = ntoh24(tcp_sw_conn->out.hdr->dlength); in iscsi_sw_tcp_send_linear_data_prep()
531 if (conn->datadgst_en) in iscsi_sw_tcp_send_linear_data_prep()
532 tx_crcp = &tcp_sw_conn->tx_crc; in iscsi_sw_tcp_send_linear_data_prep()
534 iscsi_segment_init_linear(&tcp_sw_conn->out.data_segment, in iscsi_sw_tcp_send_linear_data_prep()
541 struct iscsi_conn *conn = task->conn; in iscsi_sw_tcp_pdu_init()
544 iscsi_sw_tcp_send_hdr_prep(conn, task->hdr, task->hdr_len); in iscsi_sw_tcp_pdu_init()
549 if (!task->sc) in iscsi_sw_tcp_pdu_init()
550 iscsi_sw_tcp_send_linear_data_prep(conn, task->data, count); in iscsi_sw_tcp_pdu_init()
552 struct scsi_data_buffer *sdb = &task->sc->sdb; in iscsi_sw_tcp_pdu_init()
554 err = iscsi_sw_tcp_send_data_prep(conn, sdb->table.sgl, in iscsi_sw_tcp_pdu_init()
555 sdb->table.nents, offset, in iscsi_sw_tcp_pdu_init()
561 return -EIO; in iscsi_sw_tcp_pdu_init()
568 struct iscsi_tcp_task *tcp_task = task->dd_data; in iscsi_sw_tcp_pdu_alloc()
570 task->hdr = task->dd_data + sizeof(*tcp_task); in iscsi_sw_tcp_pdu_alloc()
571 task->hdr_max = sizeof(struct iscsi_sw_tcp_hdrbuf) - ISCSI_DIGEST_SIZE; in iscsi_sw_tcp_pdu_alloc()
588 conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_create()
589 tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_create()
590 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_create()
591 INIT_WORK(&conn->recvwork, iscsi_sw_tcp_recv_data_work); in iscsi_sw_tcp_conn_create()
592 tcp_sw_conn->queue_recv = iscsi_recv_from_iscsi_q; in iscsi_sw_tcp_conn_create()
594 mutex_init(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_create()
595 tcp_conn->rx_crcp = &tcp_sw_conn->rx_crc; in iscsi_sw_tcp_conn_create()
602 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_release_conn()
603 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_release_conn()
604 struct socket *sock = tcp_sw_conn->sock; in iscsi_sw_tcp_release_conn()
620 sock_hold(sock->sk); in iscsi_sw_tcp_release_conn()
622 sock_put(sock->sk); in iscsi_sw_tcp_release_conn()
626 mutex_lock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_release_conn()
627 tcp_sw_conn->sock = NULL; in iscsi_sw_tcp_release_conn()
628 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_release_conn()
634 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_destroy()
642 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_stop()
643 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_stop()
644 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_stop()
645 struct socket *sock = tcp_sw_conn->sock; in iscsi_sw_tcp_conn_stop()
651 sock->sk->sk_err = EIO; in iscsi_sw_tcp_conn_stop()
652 wake_up_interruptible(sk_sleep(sock->sk)); in iscsi_sw_tcp_conn_stop()
668 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_bind()
669 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_bind()
670 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_bind()
680 return -EEXIST; in iscsi_sw_tcp_conn_bind()
683 err = -EINVAL; in iscsi_sw_tcp_conn_bind()
684 if (!sk_is_tcp(sock->sk)) in iscsi_sw_tcp_conn_bind()
691 mutex_lock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_bind()
693 tcp_sw_conn->sock = sock; in iscsi_sw_tcp_conn_bind()
694 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_bind()
697 sk = sock->sk; in iscsi_sw_tcp_conn_bind()
698 sk->sk_reuse = SK_CAN_REUSE; in iscsi_sw_tcp_conn_bind()
699 sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */ in iscsi_sw_tcp_conn_bind()
700 sk->sk_allocation = GFP_ATOMIC; in iscsi_sw_tcp_conn_bind()
701 sk->sk_use_task_frag = false; in iscsi_sw_tcp_conn_bind()
721 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_set_param()
722 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_set_param()
723 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_set_param()
730 mutex_lock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_set_param()
731 if (!tcp_sw_conn->sock) { in iscsi_sw_tcp_conn_set_param()
732 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_set_param()
733 return -ENOTCONN; in iscsi_sw_tcp_conn_set_param()
736 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_set_param()
750 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_get_param()
761 spin_lock_bh(&conn->session->frwd_lock); in iscsi_sw_tcp_conn_get_param()
762 if (!conn->session->leadconn) { in iscsi_sw_tcp_conn_get_param()
763 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_sw_tcp_conn_get_param()
764 return -ENOTCONN; in iscsi_sw_tcp_conn_get_param()
770 iscsi_get_conn(conn->cls_conn); in iscsi_sw_tcp_conn_get_param()
771 spin_unlock_bh(&conn->session->frwd_lock); in iscsi_sw_tcp_conn_get_param()
773 tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_get_param()
774 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_get_param()
776 mutex_lock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_get_param()
777 sock = tcp_sw_conn->sock; in iscsi_sw_tcp_conn_get_param()
779 rc = -ENOTCONN; in iscsi_sw_tcp_conn_get_param()
790 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_conn_get_param()
791 iscsi_put_conn(conn->cls_conn); in iscsi_sw_tcp_conn_get_param()
818 session = tcp_sw_host->session; in iscsi_sw_tcp_host_get_param()
820 return -ENOTCONN; in iscsi_sw_tcp_host_get_param()
822 spin_lock_bh(&session->frwd_lock); in iscsi_sw_tcp_host_get_param()
823 conn = session->leadconn; in iscsi_sw_tcp_host_get_param()
825 spin_unlock_bh(&session->frwd_lock); in iscsi_sw_tcp_host_get_param()
826 return -ENOTCONN; in iscsi_sw_tcp_host_get_param()
828 tcp_conn = conn->dd_data; in iscsi_sw_tcp_host_get_param()
829 tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_host_get_param()
834 iscsi_get_conn(conn->cls_conn); in iscsi_sw_tcp_host_get_param()
835 spin_unlock_bh(&session->frwd_lock); in iscsi_sw_tcp_host_get_param()
837 mutex_lock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_host_get_param()
838 sock = tcp_sw_conn->sock; in iscsi_sw_tcp_host_get_param()
840 rc = -ENOTCONN; in iscsi_sw_tcp_host_get_param()
843 mutex_unlock(&tcp_sw_conn->sock_lock); in iscsi_sw_tcp_host_get_param()
844 iscsi_put_conn(conn->cls_conn); in iscsi_sw_tcp_host_get_param()
862 struct iscsi_conn *conn = cls_conn->dd_data; in iscsi_sw_tcp_conn_get_stats()
863 struct iscsi_tcp_conn *tcp_conn = conn->dd_data; in iscsi_sw_tcp_conn_get_stats()
864 struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; in iscsi_sw_tcp_conn_get_stats()
866 stats->custom_length = 3; in iscsi_sw_tcp_conn_get_stats()
867 strcpy(stats->custom[0].desc, "tx_sendpage_failures"); in iscsi_sw_tcp_conn_get_stats()
868 stats->custom[0].value = tcp_sw_conn->sendpage_failures_cnt; in iscsi_sw_tcp_conn_get_stats()
869 strcpy(stats->custom[1].desc, "rx_discontiguous_hdr"); in iscsi_sw_tcp_conn_get_stats()
870 stats->custom[1].value = tcp_sw_conn->discontiguous_hdr_cnt; in iscsi_sw_tcp_conn_get_stats()
871 strcpy(stats->custom[2].desc, "eh_abort_cnt"); in iscsi_sw_tcp_conn_get_stats()
872 stats->custom[2].value = conn->eh_abort_cnt; in iscsi_sw_tcp_conn_get_stats()
896 shost->transportt = iscsi_sw_tcp_scsi_transport; in iscsi_sw_tcp_session_create()
897 shost->cmd_per_lun = qdepth; in iscsi_sw_tcp_session_create()
898 shost->max_lun = iscsi_max_lun; in iscsi_sw_tcp_session_create()
899 shost->max_id = 0; in iscsi_sw_tcp_session_create()
900 shost->max_channel = 0; in iscsi_sw_tcp_session_create()
901 shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE; in iscsi_sw_tcp_session_create()
902 shost->dma_alignment = 0; in iscsi_sw_tcp_session_create()
907 shost->can_queue = rc; in iscsi_sw_tcp_session_create()
919 session = cls_session->dd_data; in iscsi_sw_tcp_session_create()
926 tcp_sw_host->session = session; in iscsi_sw_tcp_session_create()
941 struct iscsi_session *session = cls_session->dd_data; in iscsi_sw_tcp_session_destroy()
943 if (WARN_ON_ONCE(session->leadconn)) in iscsi_sw_tcp_session_destroy()
954 iscsi_tcp_r2tpool_free(cls_session->dd_data); in iscsi_sw_tcp_session_destroy()
1019 struct iscsi_sw_tcp_host *tcp_sw_host = iscsi_host_priv(sdev->host); in iscsi_sw_tcp_sdev_configure()
1020 struct iscsi_session *session = tcp_sw_host->session; in iscsi_sw_tcp_sdev_configure()
1021 struct iscsi_conn *conn = session->leadconn; in iscsi_sw_tcp_sdev_configure()
1023 if (conn->datadgst_en) in iscsi_sw_tcp_sdev_configure()
1024 lim->features |= BLK_FEAT_STABLE_WRITES; in iscsi_sw_tcp_sdev_configure()
1041 .dma_boundary = PAGE_SIZE - 1,
1044 .this_id = -1,
1090 return -EINVAL; in iscsi_sw_tcp_init()
1096 return -ENODEV; in iscsi_sw_tcp_init()