• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/scsi/

Lines Matching defs:tcp_conn

109 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
111 crypto_hash_digest(&tcp_conn->tx_hash, &buf->sg, buf->sg.length, crc);
112 buf->sg.length = tcp_conn->hdr_size;
116 iscsi_hdr_extract(struct iscsi_tcp_conn *tcp_conn)
118 struct sk_buff *skb = tcp_conn->in.skb;
120 tcp_conn->in.zero_copy_hdr = 0;
122 if (tcp_conn->in.copy >= tcp_conn->hdr_size &&
123 tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER) {
130 tcp_conn->in.hdr = (struct iscsi_hdr *)
131 ((char*)skb->data + tcp_conn->in.offset);
132 tcp_conn->in.zero_copy_hdr = 1;
136 skb_copy_bits(skb, tcp_conn->in.offset,
137 &tcp_conn->hdr, tcp_conn->hdr_size);
138 tcp_conn->in.hdr = &tcp_conn->hdr;
140 tcp_conn->in.offset += tcp_conn->hdr_size;
141 tcp_conn->in.copy -= tcp_conn->hdr_size;
151 if (tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER)
152 tcp_conn->in.hdr_offset = 0;
154 hdr_remains = tcp_conn->hdr_size - tcp_conn->in.hdr_offset;
157 copylen = min(tcp_conn->in.copy, hdr_remains);
158 skb_copy_bits(skb, tcp_conn->in.offset,
159 (char*)&tcp_conn->hdr + tcp_conn->in.hdr_offset,
163 "in.copy %d\n", tcp_conn->in.hdr_offset, copylen,
164 tcp_conn->in.offset, tcp_conn->in.copy);
166 tcp_conn->in.offset += copylen;
167 tcp_conn->in.copy -= copylen;
169 tcp_conn->in_progress = IN_PROGRESS_HEADER_GATHER;
170 tcp_conn->in.hdr_offset += copylen;
173 tcp_conn->in.hdr = &tcp_conn->hdr;
174 tcp_conn->discontiguous_hdr_cnt++;
175 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
215 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
217 struct iscsi_data_rsp *rhdr = (struct iscsi_data_rsp *)tcp_conn->in.hdr;
227 ctask->data_count = tcp_conn->in.datalen;
229 if (tcp_conn->in.datalen == 0)
238 if (tcp_ctask->data_offset + tcp_conn->in.datalen > ctask->total_length)
356 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
357 struct iscsi_r2t_rsp *rhdr = (struct iscsi_r2t_rsp *)tcp_conn->in.hdr;
361 if (tcp_conn->in.datalen) {
363 tcp_conn->in.datalen);
433 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
436 hdr = tcp_conn->in.hdr;
439 tcp_conn->in.datalen = ntoh24(hdr->dlength);
440 if (tcp_conn->in.datalen > conn->max_recv_dlength) {
442 tcp_conn->in.datalen, conn->max_recv_dlength);
445 tcp_conn->data_copied = 0;
449 tcp_conn->in.offset += ahslen;
450 tcp_conn->in.copy -= ahslen;
451 if (tcp_conn->in.copy < 0) {
458 tcp_conn->in.padding = tcp_conn->in.datalen & (ISCSI_PAD_LEN-1);
459 if (tcp_conn->in.padding) {
460 tcp_conn->in.padding = ISCSI_PAD_LEN - tcp_conn->in.padding;
461 debug_scsi("read padding %d bytes\n", tcp_conn->in.padding);
469 crypto_hash_digest(&tcp_conn->rx_hash, &sg, sg.length,
484 tcp_conn->in.datalen = 0; /* force drop */
490 opcode, tcp_conn->in.offset, tcp_conn->in.copy,
491 ahslen, tcp_conn->in.datalen);
495 tcp_conn->in.ctask = session->cmds[itt];
496 rc = iscsi_data_rsp(conn, tcp_conn->in.ctask);
501 tcp_conn->in.ctask = session->cmds[itt];
502 if (tcp_conn->in.datalen)
510 tcp_conn->in.ctask = session->cmds[itt];
513 else if (tcp_conn->in.ctask->sc->sc_data_direction ==
515 rc = iscsi_r2t_rsp(conn, tcp_conn->in.ctask);
529 tcp_conn->in.datalen) {
532 tcp_conn->in.datalen,
538 if (tcp_conn->in.datalen)
559 if (tcp_conn->in.zero_copy_hdr && tcp_conn->in.copy <=
560 (tcp_conn->in.datalen + tcp_conn->in.padding +
563 " %d\n", tcp_conn->in.copy, tcp_conn->in.datalen);
564 memcpy(&tcp_conn->hdr, tcp_conn->in.hdr,
566 tcp_conn->in.hdr = &tcp_conn->hdr;
567 tcp_conn->in.zero_copy_hdr = 0;
596 iscsi_ctask_copy(struct iscsi_tcp_conn *tcp_conn, struct iscsi_cmd_task *ctask,
600 int buf_left = buf_size - (tcp_conn->data_copied + offset);
601 int size = min(tcp_conn->in.copy, buf_left);
607 size, tcp_conn->in.offset, tcp_conn->in.copied);
612 rc = skb_copy_bits(tcp_conn->in.skb, tcp_conn->in.offset,
613 (char*)buf + (offset + tcp_conn->data_copied), size);
617 tcp_conn->in.offset += size;
618 tcp_conn->in.copy -= size;
619 tcp_conn->in.copied += size;
620 tcp_conn->data_copied += size;
624 BUG_ON(tcp_conn->in.copy < 0);
627 if (buf_size != (tcp_conn->data_copied + offset)) {
629 BUG_ON(buf_size - tcp_conn->data_copied < 0);
631 return buf_size - tcp_conn->data_copied;
637 tcp_conn->data_copied = 0;
652 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
653 int buf_left = buf_size - tcp_conn->data_copied;
654 int size = min(tcp_conn->in.copy, buf_left);
658 size, tcp_conn->in.offset, tcp_conn->data_copied);
661 rc = skb_copy_bits(tcp_conn->in.skb, tcp_conn->in.offset,
662 (char*)conn->data + tcp_conn->data_copied, size);
665 tcp_conn->in.offset += size;
666 tcp_conn->in.copy -= size;
667 tcp_conn->in.copied += size;
668 tcp_conn->data_copied += size;
670 if (buf_size != tcp_conn->data_copied)
689 iscsi_recv_digest_update(struct iscsi_tcp_conn *tcp_conn, char* buf, int len)
694 crypto_hash_update(&tcp_conn->rx_hash, &tmp, len);
699 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
700 struct iscsi_cmd_task *ctask = tcp_conn->in.ctask;
713 rc = iscsi_ctask_copy(tcp_conn, ctask, sc->request_buffer,
719 iscsi_recv_digest_update(tcp_conn, sc->request_buffer,
739 rc = iscsi_ctask_copy(tcp_conn, ctask, dest + sg[i].offset,
749 &tcp_conn->rx_hash,
753 &tcp_conn->rx_hash,
767 partial_sg_digest_update(&tcp_conn->rx_hash,
775 if (!tcp_conn->in.copy)
782 if (tcp_conn->in.hdr->flags & ISCSI_FLAG_DATA_STATUS) {
785 tcp_conn->in.hdr->flags);
787 __iscsi_complete_pdu(conn, tcp_conn->in.hdr, NULL, 0);
797 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
800 opcode = tcp_conn->in.hdr->opcode & ISCSI_OPCODE_MASK;
814 if (iscsi_tcp_copy(conn, tcp_conn->in.datalen)) {
819 rc = iscsi_complete_pdu(conn, tcp_conn->in.hdr, conn->data,
820 tcp_conn->in.datalen);
822 iscsi_recv_digest_update(tcp_conn, conn->data,
823 tcp_conn->in.datalen);
845 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
854 tcp_conn->in.copy = skb->len - offset;
855 tcp_conn->in.offset = offset;
856 tcp_conn->in.skb = skb;
857 tcp_conn->in.len = tcp_conn->in.copy;
858 BUG_ON(tcp_conn->in.copy <= 0);
859 debug_tcp("in %d bytes\n", tcp_conn->in.copy);
862 tcp_conn->in.copied = 0;
870 if (tcp_conn->in_progress == IN_PROGRESS_WAIT_HEADER ||
871 tcp_conn->in_progress == IN_PROGRESS_HEADER_GATHER) {
872 rc = iscsi_hdr_extract(tcp_conn);
886 if (!rc && tcp_conn->in.datalen) {
888 crypto_hash_init(&tcp_conn->rx_hash);
889 tcp_conn->in_progress = IN_PROGRESS_DATA_RECV;
896 if (tcp_conn->in_progress == IN_PROGRESS_DDIGEST_RECV) {
900 tcp_conn->in.offset, tcp_conn->in.copy);
910 if (recv_digest != tcp_conn->in.datadgst) {
913 tcp_conn->in.datadgst);
919 tcp_conn->in.datadgst);
920 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
924 if (tcp_conn->in_progress == IN_PROGRESS_DATA_RECV &&
925 tcp_conn->in.copy) {
928 tcp_conn->in.offset, tcp_conn->in.copy);
937 tcp_conn->in.copy -= tcp_conn->in.padding;
938 tcp_conn->in.offset += tcp_conn->in.padding;
940 if (tcp_conn->in.padding) {
942 tcp_conn->in.padding);
943 memset(pad, 0, tcp_conn->in.padding);
944 sg_init_one(&sg, pad, tcp_conn->in.padding);
945 crypto_hash_update(&tcp_conn->rx_hash,
948 crypto_hash_final(&tcp_conn->rx_hash,
949 (u8 *) &tcp_conn->in.datadgst);
950 debug_tcp("rx digest 0x%x\n", tcp_conn->in.datadgst);
951 tcp_conn->in_progress = IN_PROGRESS_DDIGEST_RECV;
952 tcp_conn->data_copied = 0;
954 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
958 tcp_conn->in.offset - offset, (int)len, tcp_conn->in.padding);
959 BUG_ON(tcp_conn->in.offset - offset > len);
961 if (tcp_conn->in.offset - offset != len) {
963 (int)len - (tcp_conn->in.offset - offset));
968 processed = tcp_conn->in.offset - offset;
973 processed = tcp_conn->in.offset - offset;
1007 struct iscsi_tcp_conn *tcp_conn;
1024 tcp_conn = conn->dd_data;
1025 old_state_change = tcp_conn->old_state_change;
1040 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1042 tcp_conn->old_write_space(sk);
1050 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1051 struct sock *sk = tcp_conn->sock->sk;
1056 tcp_conn->old_data_ready = sk->sk_data_ready;
1057 tcp_conn->old_state_change = sk->sk_state_change;
1058 tcp_conn->old_write_space = sk->sk_write_space;
1066 iscsi_conn_restore_callbacks(struct iscsi_tcp_conn *tcp_conn)
1068 struct sock *sk = tcp_conn->sock->sk;
1073 sk->sk_data_ready = tcp_conn->old_data_ready;
1074 sk->sk_state_change = tcp_conn->old_state_change;
1075 sk->sk_write_space = tcp_conn->old_write_space;
1090 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1091 struct socket *sk = tcp_conn->sock;
1105 res = tcp_conn->sendpage(sk, buf->sg.page, offset, size, flags);
1113 tcp_conn->sendpage_failures_cnt++;
1191 iscsi_data_digest_init(struct iscsi_tcp_conn *tcp_conn,
1194 crypto_hash_init(&tcp_conn->tx_hash);
1440 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1447 crypto_hash_update(&tcp_conn->tx_hash,
1471 struct iscsi_tcp_conn *tcp_conn;
1478 tcp_conn = conn->dd_data;
1481 crypto_hash_final(&tcp_conn->tx_hash, (u8*)digest);
1505 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1515 partial_sg_digest_update(&tcp_conn->tx_hash,
1750 struct iscsi_tcp_conn *tcp_conn;
1762 tcp_conn = kzalloc(sizeof(*tcp_conn), GFP_KERNEL);
1763 if (!tcp_conn)
1766 conn->dd_data = tcp_conn;
1767 tcp_conn->iscsi_conn = conn;
1768 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1770 tcp_conn->hdr_size = sizeof(struct iscsi_hdr);
1772 tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1774 tcp_conn->tx_hash.flags = 0;
1775 if (IS_ERR(tcp_conn->tx_hash.tfm)) {
1779 PTR_ERR(tcp_conn->tx_hash.tfm));
1783 tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1785 tcp_conn->rx_hash.flags = 0;
1786 if (IS_ERR(tcp_conn->rx_hash.tfm)) {
1790 PTR_ERR(tcp_conn->rx_hash.tfm));
1797 crypto_free_hash(tcp_conn->tx_hash.tfm);
1799 kfree(tcp_conn);
1808 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1810 if (!tcp_conn->sock)
1813 sock_hold(tcp_conn->sock->sk);
1814 iscsi_conn_restore_callbacks(tcp_conn);
1815 sock_put(tcp_conn->sock->sk);
1817 sock_release(tcp_conn->sock);
1818 tcp_conn->sock = NULL;
1826 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1831 if (tcp_conn->tx_hash.tfm)
1832 crypto_free_hash(tcp_conn->tx_hash.tfm);
1833 if (tcp_conn->rx_hash.tfm)
1834 crypto_free_hash(tcp_conn->rx_hash.tfm);
1836 kfree(tcp_conn);
1843 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1847 tcp_conn->hdr_size = sizeof(struct iscsi_hdr);
1856 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1873 tcp_conn->sock = sock;
1888 tcp_conn->sendpage = tcp_conn->sock->ops->sendpage;
1892 tcp_conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1985 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1991 tcp_conn->hdr_size = sizeof(struct iscsi_hdr);
1993 tcp_conn->hdr_size += sizeof(__u32);
1997 tcp_conn->sendpage = conn->datadgst_en ?
1998 sock_no_sendpage : tcp_conn->sock->ops->sendpage;
2023 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2032 if (!tcp_conn->sock) {
2037 inet = inet_sk(tcp_conn->sock->sk);
2043 if (!tcp_conn->sock) {
2048 sk = tcp_conn->sock->sk;
2070 struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
2083 stats->custom[0].value = tcp_conn->sendpage_failures_cnt;
2085 stats->custom[1].value = tcp_conn->discontiguous_hdr_cnt;