xref: /openbmc/linux/drivers/scsi/iscsi_tcp.c (revision f15cbe6f1a4b4d9df59142fc8e4abb973302cf44)
1 /*
2  * iSCSI Initiator over TCP/IP Data-Path
3  *
4  * Copyright (C) 2004 Dmitry Yusupov
5  * Copyright (C) 2004 Alex Aizman
6  * Copyright (C) 2005 - 2006 Mike Christie
7  * Copyright (C) 2006 Red Hat, Inc.  All rights reserved.
8  * maintained by open-iscsi@googlegroups.com
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published
12  * by the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * General Public License for more details.
19  *
20  * See the file COPYING included with this distribution for more details.
21  *
22  * Credits:
23  *	Christoph Hellwig
24  *	FUJITA Tomonori
25  *	Arne Redlich
26  *	Zhenyu Wang
27  */
28 
29 #include <linux/types.h>
30 #include <linux/list.h>
31 #include <linux/inet.h>
32 #include <linux/file.h>
33 #include <linux/blkdev.h>
34 #include <linux/crypto.h>
35 #include <linux/delay.h>
36 #include <linux/kfifo.h>
37 #include <linux/scatterlist.h>
38 #include <net/tcp.h>
39 #include <scsi/scsi_cmnd.h>
40 #include <scsi/scsi_device.h>
41 #include <scsi/scsi_host.h>
42 #include <scsi/scsi.h>
43 #include <scsi/scsi_transport_iscsi.h>
44 
45 #include "iscsi_tcp.h"
46 
47 MODULE_AUTHOR("Dmitry Yusupov <dmitry_yus@yahoo.com>, "
48 	      "Alex Aizman <itn780@yahoo.com>");
49 MODULE_DESCRIPTION("iSCSI/TCP data-path");
50 MODULE_LICENSE("GPL");
51 #undef DEBUG_TCP
52 #define DEBUG_ASSERT
53 
54 #ifdef DEBUG_TCP
55 #define debug_tcp(fmt...) printk(KERN_INFO "tcp: " fmt)
56 #else
57 #define debug_tcp(fmt...)
58 #endif
59 
60 #ifndef DEBUG_ASSERT
61 #ifdef BUG_ON
62 #undef BUG_ON
63 #endif
64 #define BUG_ON(expr)
65 #endif
66 
67 static struct scsi_transport_template *iscsi_tcp_scsi_transport;
68 static struct scsi_host_template iscsi_sht;
69 static struct iscsi_transport iscsi_tcp_transport;
70 
71 static unsigned int iscsi_max_lun = 512;
72 module_param_named(max_lun, iscsi_max_lun, uint, S_IRUGO);
73 
74 static int iscsi_tcp_hdr_recv_done(struct iscsi_tcp_conn *tcp_conn,
75 				   struct iscsi_segment *segment);
76 
77 /*
78  * Scatterlist handling: inside the iscsi_segment, we
79  * remember an index into the scatterlist, and set data/size
80  * to the current scatterlist entry. For highmem pages, we
81  * kmap as needed.
82  *
83  * Note that the page is unmapped when we return from
84  * TCP's data_ready handler, so we may end up mapping and
85  * unmapping the same page repeatedly. The whole reason
86  * for this is that we shouldn't keep the page mapped
87  * outside the softirq.
88  */
89 
90 /**
91  * iscsi_tcp_segment_init_sg - init indicated scatterlist entry
92  * @segment: the buffer object
93  * @sg: scatterlist
94  * @offset: byte offset into that sg entry
95  *
96  * This function sets up the segment so that subsequent
97  * data is copied to the indicated sg entry, at the given
98  * offset.
99  */
100 static inline void
101 iscsi_tcp_segment_init_sg(struct iscsi_segment *segment,
102 			  struct scatterlist *sg, unsigned int offset)
103 {
104 	segment->sg = sg;
105 	segment->sg_offset = offset;
106 	segment->size = min(sg->length - offset,
107 			    segment->total_size - segment->total_copied);
108 	segment->data = NULL;
109 }
110 
111 /**
112  * iscsi_tcp_segment_map - map the current S/G page
113  * @segment: iscsi_segment
114  * @recv: 1 if called from recv path
115  *
116  * We only need to possibly kmap data if scatter lists are being used,
117  * because the iscsi passthrough and internal IO paths will never use high
118  * mem pages.
119  */
120 static inline void
121 iscsi_tcp_segment_map(struct iscsi_segment *segment, int recv)
122 {
123 	struct scatterlist *sg;
124 
125 	if (segment->data != NULL || !segment->sg)
126 		return;
127 
128 	sg = segment->sg;
129 	BUG_ON(segment->sg_mapped);
130 	BUG_ON(sg->length == 0);
131 
132 	/*
133 	 * If the page count is greater than one it is ok to send
134 	 * to the network layer's zero copy send path. If not we
135 	 * have to go the slow sendmsg path. We always map for the
136 	 * recv path.
137 	 */
138 	if (page_count(sg_page(sg)) >= 1 && !recv)
139 		return;
140 
141 	debug_tcp("iscsi_tcp_segment_map %s %p\n", recv ? "recv" : "xmit",
142 		  segment);
143 	segment->sg_mapped = kmap_atomic(sg_page(sg), KM_SOFTIRQ0);
144 	segment->data = segment->sg_mapped + sg->offset + segment->sg_offset;
145 }
146 
147 static inline void
148 iscsi_tcp_segment_unmap(struct iscsi_segment *segment)
149 {
150 	debug_tcp("iscsi_tcp_segment_unmap %p\n", segment);
151 
152 	if (segment->sg_mapped) {
153 		debug_tcp("iscsi_tcp_segment_unmap valid\n");
154 		kunmap_atomic(segment->sg_mapped, KM_SOFTIRQ0);
155 		segment->sg_mapped = NULL;
156 		segment->data = NULL;
157 	}
158 }
159 
160 /*
161  * Splice the digest buffer into the buffer
162  */
163 static inline void
164 iscsi_tcp_segment_splice_digest(struct iscsi_segment *segment, void *digest)
165 {
166 	segment->data = digest;
167 	segment->digest_len = ISCSI_DIGEST_SIZE;
168 	segment->total_size += ISCSI_DIGEST_SIZE;
169 	segment->size = ISCSI_DIGEST_SIZE;
170 	segment->copied = 0;
171 	segment->sg = NULL;
172 	segment->hash = NULL;
173 }
174 
175 /**
176  * iscsi_tcp_segment_done - check whether the segment is complete
177  * @segment: iscsi segment to check
178  * @recv: set to one of this is called from the recv path
179  * @copied: number of bytes copied
180  *
181  * Check if we're done receiving this segment. If the receive
182  * buffer is full but we expect more data, move on to the
183  * next entry in the scatterlist.
184  *
185  * If the amount of data we received isn't a multiple of 4,
186  * we will transparently receive the pad bytes, too.
187  *
188  * This function must be re-entrant.
189  */
190 static inline int
191 iscsi_tcp_segment_done(struct iscsi_segment *segment, int recv, unsigned copied)
192 {
193 	static unsigned char padbuf[ISCSI_PAD_LEN];
194 	struct scatterlist sg;
195 	unsigned int pad;
196 
197 	debug_tcp("copied %u %u size %u %s\n", segment->copied, copied,
198 		  segment->size, recv ? "recv" : "xmit");
199 	if (segment->hash && copied) {
200 		/*
201 		 * If a segment is kmapd we must unmap it before sending
202 		 * to the crypto layer since that will try to kmap it again.
203 		 */
204 		iscsi_tcp_segment_unmap(segment);
205 
206 		if (!segment->data) {
207 			sg_init_table(&sg, 1);
208 			sg_set_page(&sg, sg_page(segment->sg), copied,
209 				    segment->copied + segment->sg_offset +
210 							segment->sg->offset);
211 		} else
212 			sg_init_one(&sg, segment->data + segment->copied,
213 				    copied);
214 		crypto_hash_update(segment->hash, &sg, copied);
215 	}
216 
217 	segment->copied += copied;
218 	if (segment->copied < segment->size) {
219 		iscsi_tcp_segment_map(segment, recv);
220 		return 0;
221 	}
222 
223 	segment->total_copied += segment->copied;
224 	segment->copied = 0;
225 	segment->size = 0;
226 
227 	/* Unmap the current scatterlist page, if there is one. */
228 	iscsi_tcp_segment_unmap(segment);
229 
230 	/* Do we have more scatterlist entries? */
231 	debug_tcp("total copied %u total size %u\n", segment->total_copied,
232 		   segment->total_size);
233 	if (segment->total_copied < segment->total_size) {
234 		/* Proceed to the next entry in the scatterlist. */
235 		iscsi_tcp_segment_init_sg(segment, sg_next(segment->sg),
236 					  0);
237 		iscsi_tcp_segment_map(segment, recv);
238 		BUG_ON(segment->size == 0);
239 		return 0;
240 	}
241 
242 	/* Do we need to handle padding? */
243 	pad = iscsi_padding(segment->total_copied);
244 	if (pad != 0) {
245 		debug_tcp("consume %d pad bytes\n", pad);
246 		segment->total_size += pad;
247 		segment->size = pad;
248 		segment->data = padbuf;
249 		return 0;
250 	}
251 
252 	/*
253 	 * Set us up for transferring the data digest. hdr digest
254 	 * is completely handled in hdr done function.
255 	 */
256 	if (segment->hash) {
257 		crypto_hash_final(segment->hash, segment->digest);
258 		iscsi_tcp_segment_splice_digest(segment,
259 				 recv ? segment->recv_digest : segment->digest);
260 		return 0;
261 	}
262 
263 	return 1;
264 }
265 
266 /**
267  * iscsi_tcp_xmit_segment - transmit segment
268  * @tcp_conn: the iSCSI TCP connection
269  * @segment: the buffer to transmnit
270  *
271  * This function transmits as much of the buffer as
272  * the network layer will accept, and returns the number of
273  * bytes transmitted.
274  *
275  * If CRC hashing is enabled, the function will compute the
276  * hash as it goes. When the entire segment has been transmitted,
277  * it will retrieve the hash value and send it as well.
278  */
279 static int
280 iscsi_tcp_xmit_segment(struct iscsi_tcp_conn *tcp_conn,
281 		       struct iscsi_segment *segment)
282 {
283 	struct socket *sk = tcp_conn->sock;
284 	unsigned int copied = 0;
285 	int r = 0;
286 
287 	while (!iscsi_tcp_segment_done(segment, 0, r)) {
288 		struct scatterlist *sg;
289 		unsigned int offset, copy;
290 		int flags = 0;
291 
292 		r = 0;
293 		offset = segment->copied;
294 		copy = segment->size - offset;
295 
296 		if (segment->total_copied + segment->size < segment->total_size)
297 			flags |= MSG_MORE;
298 
299 		/* Use sendpage if we can; else fall back to sendmsg */
300 		if (!segment->data) {
301 			sg = segment->sg;
302 			offset += segment->sg_offset + sg->offset;
303 			r = tcp_conn->sendpage(sk, sg_page(sg), offset, copy,
304 					       flags);
305 		} else {
306 			struct msghdr msg = { .msg_flags = flags };
307 			struct kvec iov = {
308 				.iov_base = segment->data + offset,
309 				.iov_len = copy
310 			};
311 
312 			r = kernel_sendmsg(sk, &msg, &iov, 1, copy);
313 		}
314 
315 		if (r < 0) {
316 			iscsi_tcp_segment_unmap(segment);
317 			if (copied || r == -EAGAIN)
318 				break;
319 			return r;
320 		}
321 		copied += r;
322 	}
323 	return copied;
324 }
325 
326 /**
327  * iscsi_tcp_segment_recv - copy data to segment
328  * @tcp_conn: the iSCSI TCP connection
329  * @segment: the buffer to copy to
330  * @ptr: data pointer
331  * @len: amount of data available
332  *
333  * This function copies up to @len bytes to the
334  * given buffer, and returns the number of bytes
335  * consumed, which can actually be less than @len.
336  *
337  * If hash digest is enabled, the function will update the
338  * hash while copying.
339  * Combining these two operations doesn't buy us a lot (yet),
340  * but in the future we could implement combined copy+crc,
341  * just way we do for network layer checksums.
342  */
343 static int
344 iscsi_tcp_segment_recv(struct iscsi_tcp_conn *tcp_conn,
345 		       struct iscsi_segment *segment, const void *ptr,
346 		       unsigned int len)
347 {
348 	unsigned int copy = 0, copied = 0;
349 
350 	while (!iscsi_tcp_segment_done(segment, 1, copy)) {
351 		if (copied == len) {
352 			debug_tcp("iscsi_tcp_segment_recv copied %d bytes\n",
353 				  len);
354 			break;
355 		}
356 
357 		copy = min(len - copied, segment->size - segment->copied);
358 		debug_tcp("iscsi_tcp_segment_recv copying %d\n", copy);
359 		memcpy(segment->data + segment->copied, ptr + copied, copy);
360 		copied += copy;
361 	}
362 	return copied;
363 }
364 
365 static inline void
366 iscsi_tcp_dgst_header(struct hash_desc *hash, const void *hdr, size_t hdrlen,
367 		      unsigned char digest[ISCSI_DIGEST_SIZE])
368 {
369 	struct scatterlist sg;
370 
371 	sg_init_one(&sg, hdr, hdrlen);
372 	crypto_hash_digest(hash, &sg, hdrlen, digest);
373 }
374 
375 static inline int
376 iscsi_tcp_dgst_verify(struct iscsi_tcp_conn *tcp_conn,
377 		      struct iscsi_segment *segment)
378 {
379 	if (!segment->digest_len)
380 		return 1;
381 
382 	if (memcmp(segment->recv_digest, segment->digest,
383 		   segment->digest_len)) {
384 		debug_scsi("digest mismatch\n");
385 		return 0;
386 	}
387 
388 	return 1;
389 }
390 
391 /*
392  * Helper function to set up segment buffer
393  */
394 static inline void
395 __iscsi_segment_init(struct iscsi_segment *segment, size_t size,
396 		     iscsi_segment_done_fn_t *done, struct hash_desc *hash)
397 {
398 	memset(segment, 0, sizeof(*segment));
399 	segment->total_size = size;
400 	segment->done = done;
401 
402 	if (hash) {
403 		segment->hash = hash;
404 		crypto_hash_init(hash);
405 	}
406 }
407 
408 static inline void
409 iscsi_segment_init_linear(struct iscsi_segment *segment, void *data,
410 			  size_t size, iscsi_segment_done_fn_t *done,
411 			  struct hash_desc *hash)
412 {
413 	__iscsi_segment_init(segment, size, done, hash);
414 	segment->data = data;
415 	segment->size = size;
416 }
417 
418 static inline int
419 iscsi_segment_seek_sg(struct iscsi_segment *segment,
420 		      struct scatterlist *sg_list, unsigned int sg_count,
421 		      unsigned int offset, size_t size,
422 		      iscsi_segment_done_fn_t *done, struct hash_desc *hash)
423 {
424 	struct scatterlist *sg;
425 	unsigned int i;
426 
427 	debug_scsi("iscsi_segment_seek_sg offset %u size %llu\n",
428 		  offset, size);
429 	__iscsi_segment_init(segment, size, done, hash);
430 	for_each_sg(sg_list, sg, sg_count, i) {
431 		debug_scsi("sg %d, len %u offset %u\n", i, sg->length,
432 			   sg->offset);
433 		if (offset < sg->length) {
434 			iscsi_tcp_segment_init_sg(segment, sg, offset);
435 			return 0;
436 		}
437 		offset -= sg->length;
438 	}
439 
440 	return ISCSI_ERR_DATA_OFFSET;
441 }
442 
443 /**
444  * iscsi_tcp_hdr_recv_prep - prep segment for hdr reception
445  * @tcp_conn: iscsi connection to prep for
446  *
447  * This function always passes NULL for the hash argument, because when this
448  * function is called we do not yet know the final size of the header and want
449  * to delay the digest processing until we know that.
450  */
451 static void
452 iscsi_tcp_hdr_recv_prep(struct iscsi_tcp_conn *tcp_conn)
453 {
454 	debug_tcp("iscsi_tcp_hdr_recv_prep(%p%s)\n", tcp_conn,
455 		  tcp_conn->iscsi_conn->hdrdgst_en ? ", digest enabled" : "");
456 	iscsi_segment_init_linear(&tcp_conn->in.segment,
457 				tcp_conn->in.hdr_buf, sizeof(struct iscsi_hdr),
458 				iscsi_tcp_hdr_recv_done, NULL);
459 }
460 
461 /*
462  * Handle incoming reply to any other type of command
463  */
464 static int
465 iscsi_tcp_data_recv_done(struct iscsi_tcp_conn *tcp_conn,
466 			 struct iscsi_segment *segment)
467 {
468 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
469 	int rc = 0;
470 
471 	if (!iscsi_tcp_dgst_verify(tcp_conn, segment))
472 		return ISCSI_ERR_DATA_DGST;
473 
474 	rc = iscsi_complete_pdu(conn, tcp_conn->in.hdr,
475 			conn->data, tcp_conn->in.datalen);
476 	if (rc)
477 		return rc;
478 
479 	iscsi_tcp_hdr_recv_prep(tcp_conn);
480 	return 0;
481 }
482 
483 static void
484 iscsi_tcp_data_recv_prep(struct iscsi_tcp_conn *tcp_conn)
485 {
486 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
487 	struct hash_desc *rx_hash = NULL;
488 
489 	if (conn->datadgst_en)
490 		rx_hash = &tcp_conn->rx_hash;
491 
492 	iscsi_segment_init_linear(&tcp_conn->in.segment,
493 				conn->data, tcp_conn->in.datalen,
494 				iscsi_tcp_data_recv_done, rx_hash);
495 }
496 
497 /*
498  * must be called with session lock
499  */
500 static void
501 iscsi_tcp_cleanup_task(struct iscsi_conn *conn, struct iscsi_task *task)
502 {
503 	struct iscsi_tcp_task *tcp_task = task->dd_data;
504 	struct iscsi_r2t_info *r2t;
505 
506 	/* nothing to do for mgmt tasks */
507 	if (!task->sc)
508 		return;
509 
510 	/* flush task's r2t queues */
511 	while (__kfifo_get(tcp_task->r2tqueue, (void*)&r2t, sizeof(void*))) {
512 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
513 			    sizeof(void*));
514 		debug_scsi("iscsi_tcp_cleanup_task pending r2t dropped\n");
515 	}
516 
517 	r2t = tcp_task->r2t;
518 	if (r2t != NULL) {
519 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
520 			    sizeof(void*));
521 		tcp_task->r2t = NULL;
522 	}
523 }
524 
525 /**
526  * iscsi_data_rsp - SCSI Data-In Response processing
527  * @conn: iscsi connection
528  * @task: scsi command task
529  **/
530 static int
531 iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
532 {
533 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
534 	struct iscsi_tcp_task *tcp_task = task->dd_data;
535 	struct iscsi_data_rsp *rhdr = (struct iscsi_data_rsp *)tcp_conn->in.hdr;
536 	struct iscsi_session *session = conn->session;
537 	struct scsi_cmnd *sc = task->sc;
538 	int datasn = be32_to_cpu(rhdr->datasn);
539 	unsigned total_in_length = scsi_in(sc)->length;
540 
541 	iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
542 	if (tcp_conn->in.datalen == 0)
543 		return 0;
544 
545 	if (tcp_task->exp_datasn != datasn) {
546 		debug_tcp("%s: task->exp_datasn(%d) != rhdr->datasn(%d)\n",
547 		          __func__, tcp_task->exp_datasn, datasn);
548 		return ISCSI_ERR_DATASN;
549 	}
550 
551 	tcp_task->exp_datasn++;
552 
553 	tcp_task->data_offset = be32_to_cpu(rhdr->offset);
554 	if (tcp_task->data_offset + tcp_conn->in.datalen > total_in_length) {
555 		debug_tcp("%s: data_offset(%d) + data_len(%d) > total_length_in(%d)\n",
556 		          __func__, tcp_task->data_offset,
557 		          tcp_conn->in.datalen, total_in_length);
558 		return ISCSI_ERR_DATA_OFFSET;
559 	}
560 
561 	if (rhdr->flags & ISCSI_FLAG_DATA_STATUS) {
562 		sc->result = (DID_OK << 16) | rhdr->cmd_status;
563 		conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
564 		if (rhdr->flags & (ISCSI_FLAG_DATA_UNDERFLOW |
565 		                   ISCSI_FLAG_DATA_OVERFLOW)) {
566 			int res_count = be32_to_cpu(rhdr->residual_count);
567 
568 			if (res_count > 0 &&
569 			    (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW ||
570 			     res_count <= total_in_length))
571 				scsi_in(sc)->resid = res_count;
572 			else
573 				sc->result = (DID_BAD_TARGET << 16) |
574 					rhdr->cmd_status;
575 		}
576 	}
577 
578 	conn->datain_pdus_cnt++;
579 	return 0;
580 }
581 
582 /**
583  * iscsi_solicit_data_init - initialize first Data-Out
584  * @conn: iscsi connection
585  * @task: scsi command task
586  * @r2t: R2T info
587  *
588  * Notes:
589  *	Initialize first Data-Out within this R2T sequence and finds
590  *	proper data_offset within this SCSI command.
591  *
592  *	This function is called with connection lock taken.
593  **/
594 static void
595 iscsi_solicit_data_init(struct iscsi_conn *conn, struct iscsi_task *task,
596 			struct iscsi_r2t_info *r2t)
597 {
598 	struct iscsi_data *hdr;
599 
600 	hdr = &r2t->dtask.hdr;
601 	memset(hdr, 0, sizeof(struct iscsi_data));
602 	hdr->ttt = r2t->ttt;
603 	hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
604 	r2t->solicit_datasn++;
605 	hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
606 	memcpy(hdr->lun, task->hdr->lun, sizeof(hdr->lun));
607 	hdr->itt = task->hdr->itt;
608 	hdr->exp_statsn = r2t->exp_statsn;
609 	hdr->offset = cpu_to_be32(r2t->data_offset);
610 	if (r2t->data_length > conn->max_xmit_dlength) {
611 		hton24(hdr->dlength, conn->max_xmit_dlength);
612 		r2t->data_count = conn->max_xmit_dlength;
613 		hdr->flags = 0;
614 	} else {
615 		hton24(hdr->dlength, r2t->data_length);
616 		r2t->data_count = r2t->data_length;
617 		hdr->flags = ISCSI_FLAG_CMD_FINAL;
618 	}
619 	conn->dataout_pdus_cnt++;
620 
621 	r2t->sent = 0;
622 }
623 
624 /**
625  * iscsi_r2t_rsp - iSCSI R2T Response processing
626  * @conn: iscsi connection
627  * @task: scsi command task
628  **/
629 static int
630 iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
631 {
632 	struct iscsi_r2t_info *r2t;
633 	struct iscsi_session *session = conn->session;
634 	struct iscsi_tcp_task *tcp_task = task->dd_data;
635 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
636 	struct iscsi_r2t_rsp *rhdr = (struct iscsi_r2t_rsp *)tcp_conn->in.hdr;
637 	int r2tsn = be32_to_cpu(rhdr->r2tsn);
638 	int rc;
639 
640 	if (tcp_conn->in.datalen) {
641 		iscsi_conn_printk(KERN_ERR, conn,
642 				  "invalid R2t with datalen %d\n",
643 				  tcp_conn->in.datalen);
644 		return ISCSI_ERR_DATALEN;
645 	}
646 
647 	if (tcp_task->exp_datasn != r2tsn){
648 		debug_tcp("%s: task->exp_datasn(%d) != rhdr->r2tsn(%d)\n",
649 		          __func__, tcp_task->exp_datasn, r2tsn);
650 		return ISCSI_ERR_R2TSN;
651 	}
652 
653 	/* fill-in new R2T associated with the task */
654 	iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
655 
656 	if (!task->sc || session->state != ISCSI_STATE_LOGGED_IN) {
657 		iscsi_conn_printk(KERN_INFO, conn,
658 				  "dropping R2T itt %d in recovery.\n",
659 				  task->itt);
660 		return 0;
661 	}
662 
663 	rc = __kfifo_get(tcp_task->r2tpool.queue, (void*)&r2t, sizeof(void*));
664 	BUG_ON(!rc);
665 
666 	r2t->exp_statsn = rhdr->statsn;
667 	r2t->data_length = be32_to_cpu(rhdr->data_length);
668 	if (r2t->data_length == 0) {
669 		iscsi_conn_printk(KERN_ERR, conn,
670 				  "invalid R2T with zero data len\n");
671 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
672 			    sizeof(void*));
673 		return ISCSI_ERR_DATALEN;
674 	}
675 
676 	if (r2t->data_length > session->max_burst)
677 		debug_scsi("invalid R2T with data len %u and max burst %u."
678 			   "Attempting to execute request.\n",
679 			    r2t->data_length, session->max_burst);
680 
681 	r2t->data_offset = be32_to_cpu(rhdr->data_offset);
682 	if (r2t->data_offset + r2t->data_length > scsi_out(task->sc)->length) {
683 		iscsi_conn_printk(KERN_ERR, conn,
684 				  "invalid R2T with data len %u at offset %u "
685 				  "and total length %d\n", r2t->data_length,
686 				  r2t->data_offset, scsi_out(task->sc)->length);
687 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
688 			    sizeof(void*));
689 		return ISCSI_ERR_DATALEN;
690 	}
691 
692 	r2t->ttt = rhdr->ttt; /* no flip */
693 	r2t->solicit_datasn = 0;
694 
695 	iscsi_solicit_data_init(conn, task, r2t);
696 
697 	tcp_task->exp_datasn = r2tsn + 1;
698 	__kfifo_put(tcp_task->r2tqueue, (void*)&r2t, sizeof(void*));
699 	conn->r2t_pdus_cnt++;
700 
701 	iscsi_requeue_task(task);
702 	return 0;
703 }
704 
705 /*
706  * Handle incoming reply to DataIn command
707  */
708 static int
709 iscsi_tcp_process_data_in(struct iscsi_tcp_conn *tcp_conn,
710 			  struct iscsi_segment *segment)
711 {
712 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
713 	struct iscsi_hdr *hdr = tcp_conn->in.hdr;
714 	int rc;
715 
716 	if (!iscsi_tcp_dgst_verify(tcp_conn, segment))
717 		return ISCSI_ERR_DATA_DGST;
718 
719 	/* check for non-exceptional status */
720 	if (hdr->flags & ISCSI_FLAG_DATA_STATUS) {
721 		rc = iscsi_complete_pdu(conn, tcp_conn->in.hdr, NULL, 0);
722 		if (rc)
723 			return rc;
724 	}
725 
726 	iscsi_tcp_hdr_recv_prep(tcp_conn);
727 	return 0;
728 }
729 
730 /**
731  * iscsi_tcp_hdr_dissect - process PDU header
732  * @conn: iSCSI connection
733  * @hdr: PDU header
734  *
735  * This function analyzes the header of the PDU received,
736  * and performs several sanity checks. If the PDU is accompanied
737  * by data, the receive buffer is set up to copy the incoming data
738  * to the correct location.
739  */
740 static int
741 iscsi_tcp_hdr_dissect(struct iscsi_conn *conn, struct iscsi_hdr *hdr)
742 {
743 	int rc = 0, opcode, ahslen;
744 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
745 	struct iscsi_task *task;
746 
747 	/* verify PDU length */
748 	tcp_conn->in.datalen = ntoh24(hdr->dlength);
749 	if (tcp_conn->in.datalen > conn->max_recv_dlength) {
750 		iscsi_conn_printk(KERN_ERR, conn,
751 				  "iscsi_tcp: datalen %d > %d\n",
752 				  tcp_conn->in.datalen, conn->max_recv_dlength);
753 		return ISCSI_ERR_DATALEN;
754 	}
755 
756 	/* Additional header segments. So far, we don't
757 	 * process additional headers.
758 	 */
759 	ahslen = hdr->hlength << 2;
760 
761 	opcode = hdr->opcode & ISCSI_OPCODE_MASK;
762 	/* verify itt (itt encoding: age+cid+itt) */
763 	rc = iscsi_verify_itt(conn, hdr->itt);
764 	if (rc)
765 		return rc;
766 
767 	debug_tcp("opcode 0x%x ahslen %d datalen %d\n",
768 		  opcode, ahslen, tcp_conn->in.datalen);
769 
770 	switch(opcode) {
771 	case ISCSI_OP_SCSI_DATA_IN:
772 		spin_lock(&conn->session->lock);
773 		task = iscsi_itt_to_ctask(conn, hdr->itt);
774 		if (!task)
775 			rc = ISCSI_ERR_BAD_ITT;
776 		else
777 			rc = iscsi_data_rsp(conn, task);
778 		if (rc) {
779 			spin_unlock(&conn->session->lock);
780 			break;
781 		}
782 
783 		if (tcp_conn->in.datalen) {
784 			struct iscsi_tcp_task *tcp_task = task->dd_data;
785 			struct hash_desc *rx_hash = NULL;
786 			struct scsi_data_buffer *sdb = scsi_in(task->sc);
787 
788 			/*
789 			 * Setup copy of Data-In into the Scsi_Cmnd
790 			 * Scatterlist case:
791 			 * We set up the iscsi_segment to point to the next
792 			 * scatterlist entry to copy to. As we go along,
793 			 * we move on to the next scatterlist entry and
794 			 * update the digest per-entry.
795 			 */
796 			if (conn->datadgst_en)
797 				rx_hash = &tcp_conn->rx_hash;
798 
799 			debug_tcp("iscsi_tcp_begin_data_in(%p, offset=%d, "
800 				  "datalen=%d)\n", tcp_conn,
801 				  tcp_task->data_offset,
802 				  tcp_conn->in.datalen);
803 			rc = iscsi_segment_seek_sg(&tcp_conn->in.segment,
804 						   sdb->table.sgl,
805 						   sdb->table.nents,
806 						   tcp_task->data_offset,
807 						   tcp_conn->in.datalen,
808 						   iscsi_tcp_process_data_in,
809 						   rx_hash);
810 			spin_unlock(&conn->session->lock);
811 			return rc;
812 		}
813 		rc = __iscsi_complete_pdu(conn, hdr, NULL, 0);
814 		spin_unlock(&conn->session->lock);
815 		break;
816 	case ISCSI_OP_SCSI_CMD_RSP:
817 		if (tcp_conn->in.datalen) {
818 			iscsi_tcp_data_recv_prep(tcp_conn);
819 			return 0;
820 		}
821 		rc = iscsi_complete_pdu(conn, hdr, NULL, 0);
822 		break;
823 	case ISCSI_OP_R2T:
824 		spin_lock(&conn->session->lock);
825 		task = iscsi_itt_to_ctask(conn, hdr->itt);
826 		if (!task)
827 			rc = ISCSI_ERR_BAD_ITT;
828 		else if (ahslen)
829 			rc = ISCSI_ERR_AHSLEN;
830 		else if (task->sc->sc_data_direction == DMA_TO_DEVICE)
831 			rc = iscsi_r2t_rsp(conn, task);
832 		else
833 			rc = ISCSI_ERR_PROTO;
834 		spin_unlock(&conn->session->lock);
835 		break;
836 	case ISCSI_OP_LOGIN_RSP:
837 	case ISCSI_OP_TEXT_RSP:
838 	case ISCSI_OP_REJECT:
839 	case ISCSI_OP_ASYNC_EVENT:
840 		/*
841 		 * It is possible that we could get a PDU with a buffer larger
842 		 * than 8K, but there are no targets that currently do this.
843 		 * For now we fail until we find a vendor that needs it
844 		 */
845 		if (ISCSI_DEF_MAX_RECV_SEG_LEN < tcp_conn->in.datalen) {
846 			iscsi_conn_printk(KERN_ERR, conn,
847 					  "iscsi_tcp: received buffer of "
848 					  "len %u but conn buffer is only %u "
849 					  "(opcode %0x)\n",
850 					  tcp_conn->in.datalen,
851 					  ISCSI_DEF_MAX_RECV_SEG_LEN, opcode);
852 			rc = ISCSI_ERR_PROTO;
853 			break;
854 		}
855 
856 		/* If there's data coming in with the response,
857 		 * receive it to the connection's buffer.
858 		 */
859 		if (tcp_conn->in.datalen) {
860 			iscsi_tcp_data_recv_prep(tcp_conn);
861 			return 0;
862 		}
863 	/* fall through */
864 	case ISCSI_OP_LOGOUT_RSP:
865 	case ISCSI_OP_NOOP_IN:
866 	case ISCSI_OP_SCSI_TMFUNC_RSP:
867 		rc = iscsi_complete_pdu(conn, hdr, NULL, 0);
868 		break;
869 	default:
870 		rc = ISCSI_ERR_BAD_OPCODE;
871 		break;
872 	}
873 
874 	if (rc == 0) {
875 		/* Anything that comes with data should have
876 		 * been handled above. */
877 		if (tcp_conn->in.datalen)
878 			return ISCSI_ERR_PROTO;
879 		iscsi_tcp_hdr_recv_prep(tcp_conn);
880 	}
881 
882 	return rc;
883 }
884 
885 /**
886  * iscsi_tcp_hdr_recv_done - process PDU header
887  *
888  * This is the callback invoked when the PDU header has
889  * been received. If the header is followed by additional
890  * header segments, we go back for more data.
891  */
892 static int
893 iscsi_tcp_hdr_recv_done(struct iscsi_tcp_conn *tcp_conn,
894 			struct iscsi_segment *segment)
895 {
896 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
897 	struct iscsi_hdr *hdr;
898 
899 	/* Check if there are additional header segments
900 	 * *prior* to computing the digest, because we
901 	 * may need to go back to the caller for more.
902 	 */
903 	hdr = (struct iscsi_hdr *) tcp_conn->in.hdr_buf;
904 	if (segment->copied == sizeof(struct iscsi_hdr) && hdr->hlength) {
905 		/* Bump the header length - the caller will
906 		 * just loop around and get the AHS for us, and
907 		 * call again. */
908 		unsigned int ahslen = hdr->hlength << 2;
909 
910 		/* Make sure we don't overflow */
911 		if (sizeof(*hdr) + ahslen > sizeof(tcp_conn->in.hdr_buf))
912 			return ISCSI_ERR_AHSLEN;
913 
914 		segment->total_size += ahslen;
915 		segment->size += ahslen;
916 		return 0;
917 	}
918 
919 	/* We're done processing the header. See if we're doing
920 	 * header digests; if so, set up the recv_digest buffer
921 	 * and go back for more. */
922 	if (conn->hdrdgst_en) {
923 		if (segment->digest_len == 0) {
924 			iscsi_tcp_segment_splice_digest(segment,
925 							segment->recv_digest);
926 			return 0;
927 		}
928 		iscsi_tcp_dgst_header(&tcp_conn->rx_hash, hdr,
929 				      segment->total_copied - ISCSI_DIGEST_SIZE,
930 				      segment->digest);
931 
932 		if (!iscsi_tcp_dgst_verify(tcp_conn, segment))
933 			return ISCSI_ERR_HDR_DGST;
934 	}
935 
936 	tcp_conn->in.hdr = hdr;
937 	return iscsi_tcp_hdr_dissect(conn, hdr);
938 }
939 
940 /**
941  * iscsi_tcp_recv - TCP receive in sendfile fashion
942  * @rd_desc: read descriptor
943  * @skb: socket buffer
944  * @offset: offset in skb
945  * @len: skb->len - offset
946  **/
947 static int
948 iscsi_tcp_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
949 	       unsigned int offset, size_t len)
950 {
951 	struct iscsi_conn *conn = rd_desc->arg.data;
952 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
953 	struct iscsi_segment *segment = &tcp_conn->in.segment;
954 	struct skb_seq_state seq;
955 	unsigned int consumed = 0;
956 	int rc = 0;
957 
958 	debug_tcp("in %d bytes\n", skb->len - offset);
959 
960 	if (unlikely(conn->suspend_rx)) {
961 		debug_tcp("conn %d Rx suspended!\n", conn->id);
962 		return 0;
963 	}
964 
965 	skb_prepare_seq_read(skb, offset, skb->len, &seq);
966 	while (1) {
967 		unsigned int avail;
968 		const u8 *ptr;
969 
970 		avail = skb_seq_read(consumed, &ptr, &seq);
971 		if (avail == 0) {
972 			debug_tcp("no more data avail. Consumed %d\n",
973 				  consumed);
974 			break;
975 		}
976 		BUG_ON(segment->copied >= segment->size);
977 
978 		debug_tcp("skb %p ptr=%p avail=%u\n", skb, ptr, avail);
979 		rc = iscsi_tcp_segment_recv(tcp_conn, segment, ptr, avail);
980 		BUG_ON(rc == 0);
981 		consumed += rc;
982 
983 		if (segment->total_copied >= segment->total_size) {
984 			debug_tcp("segment done\n");
985 			rc = segment->done(tcp_conn, segment);
986 			if (rc != 0) {
987 				skb_abort_seq_read(&seq);
988 				goto error;
989 			}
990 
991 			/* The done() functions sets up the
992 			 * next segment. */
993 		}
994 	}
995 	skb_abort_seq_read(&seq);
996 	conn->rxdata_octets += consumed;
997 	return consumed;
998 
999 error:
1000 	debug_tcp("Error receiving PDU, errno=%d\n", rc);
1001 	iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1002 	return 0;
1003 }
1004 
1005 static void
1006 iscsi_tcp_data_ready(struct sock *sk, int flag)
1007 {
1008 	struct iscsi_conn *conn = sk->sk_user_data;
1009 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1010 	read_descriptor_t rd_desc;
1011 
1012 	read_lock(&sk->sk_callback_lock);
1013 
1014 	/*
1015 	 * Use rd_desc to pass 'conn' to iscsi_tcp_recv.
1016 	 * We set count to 1 because we want the network layer to
1017 	 * hand us all the skbs that are available. iscsi_tcp_recv
1018 	 * handled pdus that cross buffers or pdus that still need data.
1019 	 */
1020 	rd_desc.arg.data = conn;
1021 	rd_desc.count = 1;
1022 	tcp_read_sock(sk, &rd_desc, iscsi_tcp_recv);
1023 
1024 	read_unlock(&sk->sk_callback_lock);
1025 
1026 	/* If we had to (atomically) map a highmem page,
1027 	 * unmap it now. */
1028 	iscsi_tcp_segment_unmap(&tcp_conn->in.segment);
1029 }
1030 
1031 static void
1032 iscsi_tcp_state_change(struct sock *sk)
1033 {
1034 	struct iscsi_tcp_conn *tcp_conn;
1035 	struct iscsi_conn *conn;
1036 	struct iscsi_session *session;
1037 	void (*old_state_change)(struct sock *);
1038 
1039 	read_lock(&sk->sk_callback_lock);
1040 
1041 	conn = (struct iscsi_conn*)sk->sk_user_data;
1042 	session = conn->session;
1043 
1044 	if ((sk->sk_state == TCP_CLOSE_WAIT ||
1045 	     sk->sk_state == TCP_CLOSE) &&
1046 	    !atomic_read(&sk->sk_rmem_alloc)) {
1047 		debug_tcp("iscsi_tcp_state_change: TCP_CLOSE|TCP_CLOSE_WAIT\n");
1048 		iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1049 	}
1050 
1051 	tcp_conn = conn->dd_data;
1052 	old_state_change = tcp_conn->old_state_change;
1053 
1054 	read_unlock(&sk->sk_callback_lock);
1055 
1056 	old_state_change(sk);
1057 }
1058 
1059 /**
1060  * iscsi_write_space - Called when more output buffer space is available
1061  * @sk: socket space is available for
1062  **/
1063 static void
1064 iscsi_write_space(struct sock *sk)
1065 {
1066 	struct iscsi_conn *conn = (struct iscsi_conn*)sk->sk_user_data;
1067 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1068 
1069 	tcp_conn->old_write_space(sk);
1070 	debug_tcp("iscsi_write_space: cid %d\n", conn->id);
1071 	scsi_queue_work(conn->session->host, &conn->xmitwork);
1072 }
1073 
1074 static void
1075 iscsi_conn_set_callbacks(struct iscsi_conn *conn)
1076 {
1077 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1078 	struct sock *sk = tcp_conn->sock->sk;
1079 
1080 	/* assign new callbacks */
1081 	write_lock_bh(&sk->sk_callback_lock);
1082 	sk->sk_user_data = conn;
1083 	tcp_conn->old_data_ready = sk->sk_data_ready;
1084 	tcp_conn->old_state_change = sk->sk_state_change;
1085 	tcp_conn->old_write_space = sk->sk_write_space;
1086 	sk->sk_data_ready = iscsi_tcp_data_ready;
1087 	sk->sk_state_change = iscsi_tcp_state_change;
1088 	sk->sk_write_space = iscsi_write_space;
1089 	write_unlock_bh(&sk->sk_callback_lock);
1090 }
1091 
1092 static void
1093 iscsi_conn_restore_callbacks(struct iscsi_tcp_conn *tcp_conn)
1094 {
1095 	struct sock *sk = tcp_conn->sock->sk;
1096 
1097 	/* restore socket callbacks, see also: iscsi_conn_set_callbacks() */
1098 	write_lock_bh(&sk->sk_callback_lock);
1099 	sk->sk_user_data    = NULL;
1100 	sk->sk_data_ready   = tcp_conn->old_data_ready;
1101 	sk->sk_state_change = tcp_conn->old_state_change;
1102 	sk->sk_write_space  = tcp_conn->old_write_space;
1103 	sk->sk_no_check	 = 0;
1104 	write_unlock_bh(&sk->sk_callback_lock);
1105 }
1106 
1107 /**
1108  * iscsi_xmit - TCP transmit
1109  **/
1110 static int
1111 iscsi_xmit(struct iscsi_conn *conn)
1112 {
1113 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1114 	struct iscsi_segment *segment = &tcp_conn->out.segment;
1115 	unsigned int consumed = 0;
1116 	int rc = 0;
1117 
1118 	while (1) {
1119 		rc = iscsi_tcp_xmit_segment(tcp_conn, segment);
1120 		if (rc < 0)
1121 			goto error;
1122 		if (rc == 0)
1123 			break;
1124 
1125 		consumed += rc;
1126 
1127 		if (segment->total_copied >= segment->total_size) {
1128 			if (segment->done != NULL) {
1129 				rc = segment->done(tcp_conn, segment);
1130 				if (rc < 0)
1131 					goto error;
1132 			}
1133 		}
1134 	}
1135 
1136 	debug_tcp("xmit %d bytes\n", consumed);
1137 
1138 	conn->txdata_octets += consumed;
1139 	return consumed;
1140 
1141 error:
1142 	/* Transmit error. We could initiate error recovery
1143 	 * here. */
1144 	debug_tcp("Error sending PDU, errno=%d\n", rc);
1145 	iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1146 	return rc;
1147 }
1148 
1149 /**
1150  * iscsi_tcp_xmit_qlen - return the number of bytes queued for xmit
1151  */
1152 static inline int
1153 iscsi_tcp_xmit_qlen(struct iscsi_conn *conn)
1154 {
1155 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1156 	struct iscsi_segment *segment = &tcp_conn->out.segment;
1157 
1158 	return segment->total_copied - segment->total_size;
1159 }
1160 
1161 static inline int
1162 iscsi_tcp_flush(struct iscsi_conn *conn)
1163 {
1164 	int rc;
1165 
1166 	while (iscsi_tcp_xmit_qlen(conn)) {
1167 		rc = iscsi_xmit(conn);
1168 		if (rc == 0)
1169 			return -EAGAIN;
1170 		if (rc < 0)
1171 			return rc;
1172 	}
1173 
1174 	return 0;
1175 }
1176 
1177 /*
1178  * This is called when we're done sending the header.
1179  * Simply copy the data_segment to the send segment, and return.
1180  */
1181 static int
1182 iscsi_tcp_send_hdr_done(struct iscsi_tcp_conn *tcp_conn,
1183 			struct iscsi_segment *segment)
1184 {
1185 	tcp_conn->out.segment = tcp_conn->out.data_segment;
1186 	debug_tcp("Header done. Next segment size %u total_size %u\n",
1187 		  tcp_conn->out.segment.size, tcp_conn->out.segment.total_size);
1188 	return 0;
1189 }
1190 
1191 static void
1192 iscsi_tcp_send_hdr_prep(struct iscsi_conn *conn, void *hdr, size_t hdrlen)
1193 {
1194 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1195 
1196 	debug_tcp("%s(%p%s)\n", __func__, tcp_conn,
1197 			conn->hdrdgst_en? ", digest enabled" : "");
1198 
1199 	/* Clear the data segment - needs to be filled in by the
1200 	 * caller using iscsi_tcp_send_data_prep() */
1201 	memset(&tcp_conn->out.data_segment, 0, sizeof(struct iscsi_segment));
1202 
1203 	/* If header digest is enabled, compute the CRC and
1204 	 * place the digest into the same buffer. We make
1205 	 * sure that both iscsi_tcp_task and mtask have
1206 	 * sufficient room.
1207 	 */
1208 	if (conn->hdrdgst_en) {
1209 		iscsi_tcp_dgst_header(&tcp_conn->tx_hash, hdr, hdrlen,
1210 				      hdr + hdrlen);
1211 		hdrlen += ISCSI_DIGEST_SIZE;
1212 	}
1213 
1214 	/* Remember header pointer for later, when we need
1215 	 * to decide whether there's a payload to go along
1216 	 * with the header. */
1217 	tcp_conn->out.hdr = hdr;
1218 
1219 	iscsi_segment_init_linear(&tcp_conn->out.segment, hdr, hdrlen,
1220 				iscsi_tcp_send_hdr_done, NULL);
1221 }
1222 
1223 /*
1224  * Prepare the send buffer for the payload data.
1225  * Padding and checksumming will all be taken care
1226  * of by the iscsi_segment routines.
1227  */
1228 static int
1229 iscsi_tcp_send_data_prep(struct iscsi_conn *conn, struct scatterlist *sg,
1230 			 unsigned int count, unsigned int offset,
1231 			 unsigned int len)
1232 {
1233 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1234 	struct hash_desc *tx_hash = NULL;
1235 	unsigned int hdr_spec_len;
1236 
1237 	debug_tcp("%s(%p, offset=%d, datalen=%d%s)\n", __func__,
1238 			tcp_conn, offset, len,
1239 			conn->datadgst_en? ", digest enabled" : "");
1240 
1241 	/* Make sure the datalen matches what the caller
1242 	   said he would send. */
1243 	hdr_spec_len = ntoh24(tcp_conn->out.hdr->dlength);
1244 	WARN_ON(iscsi_padded(len) != iscsi_padded(hdr_spec_len));
1245 
1246 	if (conn->datadgst_en)
1247 		tx_hash = &tcp_conn->tx_hash;
1248 
1249 	return iscsi_segment_seek_sg(&tcp_conn->out.data_segment,
1250 				   sg, count, offset, len,
1251 				   NULL, tx_hash);
1252 }
1253 
1254 static void
1255 iscsi_tcp_send_linear_data_prepare(struct iscsi_conn *conn, void *data,
1256 				   size_t len)
1257 {
1258 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1259 	struct hash_desc *tx_hash = NULL;
1260 	unsigned int hdr_spec_len;
1261 
1262 	debug_tcp("%s(%p, datalen=%d%s)\n", __func__, tcp_conn, len,
1263 		  conn->datadgst_en? ", digest enabled" : "");
1264 
1265 	/* Make sure the datalen matches what the caller
1266 	   said he would send. */
1267 	hdr_spec_len = ntoh24(tcp_conn->out.hdr->dlength);
1268 	WARN_ON(iscsi_padded(len) != iscsi_padded(hdr_spec_len));
1269 
1270 	if (conn->datadgst_en)
1271 		tx_hash = &tcp_conn->tx_hash;
1272 
1273 	iscsi_segment_init_linear(&tcp_conn->out.data_segment,
1274 				data, len, NULL, tx_hash);
1275 }
1276 
1277 /**
1278  * iscsi_solicit_data_cont - initialize next Data-Out
1279  * @conn: iscsi connection
1280  * @task: scsi command task
1281  * @r2t: R2T info
1282  * @left: bytes left to transfer
1283  *
1284  * Notes:
1285  *	Initialize next Data-Out within this R2T sequence and continue
1286  *	to process next Scatter-Gather element(if any) of this SCSI command.
1287  *
1288  *	Called under connection lock.
1289  **/
1290 static int
1291 iscsi_solicit_data_cont(struct iscsi_conn *conn, struct iscsi_task *task,
1292 			struct iscsi_r2t_info *r2t)
1293 {
1294 	struct iscsi_data *hdr;
1295 	int new_offset, left;
1296 
1297 	BUG_ON(r2t->data_length - r2t->sent < 0);
1298 	left = r2t->data_length - r2t->sent;
1299 	if (left == 0)
1300 		return 0;
1301 
1302 	hdr = &r2t->dtask.hdr;
1303 	memset(hdr, 0, sizeof(struct iscsi_data));
1304 	hdr->ttt = r2t->ttt;
1305 	hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
1306 	r2t->solicit_datasn++;
1307 	hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
1308 	memcpy(hdr->lun, task->hdr->lun, sizeof(hdr->lun));
1309 	hdr->itt = task->hdr->itt;
1310 	hdr->exp_statsn = r2t->exp_statsn;
1311 	new_offset = r2t->data_offset + r2t->sent;
1312 	hdr->offset = cpu_to_be32(new_offset);
1313 	if (left > conn->max_xmit_dlength) {
1314 		hton24(hdr->dlength, conn->max_xmit_dlength);
1315 		r2t->data_count = conn->max_xmit_dlength;
1316 	} else {
1317 		hton24(hdr->dlength, left);
1318 		r2t->data_count = left;
1319 		hdr->flags = ISCSI_FLAG_CMD_FINAL;
1320 	}
1321 
1322 	conn->dataout_pdus_cnt++;
1323 	return 1;
1324 }
1325 
1326 /**
1327  * iscsi_tcp_task - Initialize iSCSI SCSI_READ or SCSI_WRITE commands
1328  * @conn: iscsi connection
1329  * @task: scsi command task
1330  * @sc: scsi command
1331  **/
1332 static int
1333 iscsi_tcp_task_init(struct iscsi_task *task)
1334 {
1335 	struct iscsi_tcp_task *tcp_task = task->dd_data;
1336 	struct iscsi_conn *conn = task->conn;
1337 	struct scsi_cmnd *sc = task->sc;
1338 	int err;
1339 
1340 	if (!sc) {
1341 		/*
1342 		 * mgmt tasks do not have a scatterlist since they come
1343 		 * in from the iscsi interface.
1344 		 */
1345 		debug_scsi("mtask deq [cid %d itt 0x%x]\n", conn->id,
1346 			   task->itt);
1347 
1348 		/* Prepare PDU, optionally w/ immediate data */
1349 		iscsi_tcp_send_hdr_prep(conn, task->hdr, sizeof(*task->hdr));
1350 
1351 		/* If we have immediate data, attach a payload */
1352 		if (task->data_count)
1353 			iscsi_tcp_send_linear_data_prepare(conn, task->data,
1354 							   task->data_count);
1355 		return 0;
1356 	}
1357 
1358 	BUG_ON(__kfifo_len(tcp_task->r2tqueue));
1359 	tcp_task->sent = 0;
1360 	tcp_task->exp_datasn = 0;
1361 
1362 	/* Prepare PDU, optionally w/ immediate data */
1363 	debug_scsi("task deq [cid %d itt 0x%x imm %d unsol %d]\n",
1364 		    conn->id, task->itt, task->imm_count,
1365 		    task->unsol_count);
1366 	iscsi_tcp_send_hdr_prep(conn, task->hdr, task->hdr_len);
1367 
1368 	if (!task->imm_count)
1369 		return 0;
1370 
1371 	/* If we have immediate data, attach a payload */
1372 	err = iscsi_tcp_send_data_prep(conn, scsi_out(sc)->table.sgl,
1373 				       scsi_out(sc)->table.nents,
1374 				       0, task->imm_count);
1375 	if (err)
1376 		return err;
1377 	tcp_task->sent += task->imm_count;
1378 	task->imm_count = 0;
1379 	return 0;
1380 }
1381 
1382 /*
1383  * iscsi_tcp_task_xmit - xmit normal PDU task
1384  * @task: iscsi command task
1385  *
1386  * We're expected to return 0 when everything was transmitted succesfully,
1387  * -EAGAIN if there's still data in the queue, or != 0 for any other kind
1388  * of error.
1389  */
1390 static int
1391 iscsi_tcp_task_xmit(struct iscsi_task *task)
1392 {
1393 	struct iscsi_conn *conn = task->conn;
1394 	struct iscsi_tcp_task *tcp_task = task->dd_data;
1395 	struct scsi_cmnd *sc = task->sc;
1396 	struct scsi_data_buffer *sdb;
1397 	int rc = 0;
1398 
1399 flush:
1400 	/* Flush any pending data first. */
1401 	rc = iscsi_tcp_flush(conn);
1402 	if (rc < 0)
1403 		return rc;
1404 
1405 	/* mgmt command */
1406 	if (!sc) {
1407 		if (task->hdr->itt == RESERVED_ITT)
1408 			iscsi_put_task(task);
1409 		return 0;
1410 	}
1411 
1412 	/* Are we done already? */
1413 	if (sc->sc_data_direction != DMA_TO_DEVICE)
1414 		return 0;
1415 
1416 	sdb = scsi_out(sc);
1417 	if (task->unsol_count != 0) {
1418 		struct iscsi_data *hdr = &tcp_task->unsol_dtask.hdr;
1419 
1420 		/* Prepare a header for the unsolicited PDU.
1421 		 * The amount of data we want to send will be
1422 		 * in task->data_count.
1423 		 * FIXME: return the data count instead.
1424 		 */
1425 		iscsi_prep_unsolicit_data_pdu(task, hdr);
1426 
1427 		debug_tcp("unsol dout [itt 0x%x doff %d dlen %d]\n",
1428 				task->itt, tcp_task->sent, task->data_count);
1429 
1430 		iscsi_tcp_send_hdr_prep(conn, hdr, sizeof(*hdr));
1431 		rc = iscsi_tcp_send_data_prep(conn, sdb->table.sgl,
1432 					      sdb->table.nents, tcp_task->sent,
1433 					      task->data_count);
1434 		if (rc)
1435 			goto fail;
1436 		tcp_task->sent += task->data_count;
1437 		task->unsol_count -= task->data_count;
1438 		goto flush;
1439 	} else {
1440 		struct iscsi_session *session = conn->session;
1441 		struct iscsi_r2t_info *r2t;
1442 
1443 		/* All unsolicited PDUs sent. Check for solicited PDUs.
1444 		 */
1445 		spin_lock_bh(&session->lock);
1446 		r2t = tcp_task->r2t;
1447 		if (r2t != NULL) {
1448 			/* Continue with this R2T? */
1449 			if (!iscsi_solicit_data_cont(conn, task, r2t)) {
1450 				debug_scsi("  done with r2t %p\n", r2t);
1451 
1452 				__kfifo_put(tcp_task->r2tpool.queue,
1453 					    (void*)&r2t, sizeof(void*));
1454 				tcp_task->r2t = r2t = NULL;
1455 			}
1456 		}
1457 
1458 		if (r2t == NULL) {
1459 			__kfifo_get(tcp_task->r2tqueue, (void*)&tcp_task->r2t,
1460 				    sizeof(void*));
1461 			r2t = tcp_task->r2t;
1462 		}
1463 		spin_unlock_bh(&session->lock);
1464 
1465 		/* Waiting for more R2Ts to arrive. */
1466 		if (r2t == NULL) {
1467 			debug_tcp("no R2Ts yet\n");
1468 			return 0;
1469 		}
1470 
1471 		debug_scsi("sol dout %p [dsn %d itt 0x%x doff %d dlen %d]\n",
1472 			r2t, r2t->solicit_datasn - 1, task->itt,
1473 			r2t->data_offset + r2t->sent, r2t->data_count);
1474 
1475 		iscsi_tcp_send_hdr_prep(conn, &r2t->dtask.hdr,
1476 					sizeof(struct iscsi_hdr));
1477 
1478 		rc = iscsi_tcp_send_data_prep(conn, sdb->table.sgl,
1479 					      sdb->table.nents,
1480 					      r2t->data_offset + r2t->sent,
1481 					      r2t->data_count);
1482 		if (rc)
1483 			goto fail;
1484 		tcp_task->sent += r2t->data_count;
1485 		r2t->sent += r2t->data_count;
1486 		goto flush;
1487 	}
1488 	return 0;
1489 fail:
1490 	iscsi_conn_failure(conn, rc);
1491 	return -EIO;
1492 }
1493 
1494 static struct iscsi_cls_conn *
1495 iscsi_tcp_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
1496 {
1497 	struct iscsi_conn *conn;
1498 	struct iscsi_cls_conn *cls_conn;
1499 	struct iscsi_tcp_conn *tcp_conn;
1500 
1501 	cls_conn = iscsi_conn_setup(cls_session, sizeof(*tcp_conn), conn_idx);
1502 	if (!cls_conn)
1503 		return NULL;
1504 	conn = cls_conn->dd_data;
1505 	/*
1506 	 * due to strange issues with iser these are not set
1507 	 * in iscsi_conn_setup
1508 	 */
1509 	conn->max_recv_dlength = ISCSI_DEF_MAX_RECV_SEG_LEN;
1510 
1511 	tcp_conn = conn->dd_data;
1512 	tcp_conn->iscsi_conn = conn;
1513 
1514 	tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1515 						  CRYPTO_ALG_ASYNC);
1516 	tcp_conn->tx_hash.flags = 0;
1517 	if (IS_ERR(tcp_conn->tx_hash.tfm))
1518 		goto free_conn;
1519 
1520 	tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1521 						  CRYPTO_ALG_ASYNC);
1522 	tcp_conn->rx_hash.flags = 0;
1523 	if (IS_ERR(tcp_conn->rx_hash.tfm))
1524 		goto free_tx_tfm;
1525 
1526 	return cls_conn;
1527 
1528 free_tx_tfm:
1529 	crypto_free_hash(tcp_conn->tx_hash.tfm);
1530 free_conn:
1531 	iscsi_conn_printk(KERN_ERR, conn,
1532 			  "Could not create connection due to crc32c "
1533 			  "loading error. Make sure the crc32c "
1534 			  "module is built as a module or into the "
1535 			  "kernel\n");
1536 	iscsi_conn_teardown(cls_conn);
1537 	return NULL;
1538 }
1539 
1540 static void
1541 iscsi_tcp_release_conn(struct iscsi_conn *conn)
1542 {
1543 	struct iscsi_session *session = conn->session;
1544 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1545 	struct socket *sock = tcp_conn->sock;
1546 
1547 	if (!sock)
1548 		return;
1549 
1550 	sock_hold(sock->sk);
1551 	iscsi_conn_restore_callbacks(tcp_conn);
1552 	sock_put(sock->sk);
1553 
1554 	spin_lock_bh(&session->lock);
1555 	tcp_conn->sock = NULL;
1556 	spin_unlock_bh(&session->lock);
1557 	sockfd_put(sock);
1558 }
1559 
1560 static void
1561 iscsi_tcp_conn_destroy(struct iscsi_cls_conn *cls_conn)
1562 {
1563 	struct iscsi_conn *conn = cls_conn->dd_data;
1564 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1565 
1566 	iscsi_tcp_release_conn(conn);
1567 
1568 	if (tcp_conn->tx_hash.tfm)
1569 		crypto_free_hash(tcp_conn->tx_hash.tfm);
1570 	if (tcp_conn->rx_hash.tfm)
1571 		crypto_free_hash(tcp_conn->rx_hash.tfm);
1572 
1573 	iscsi_conn_teardown(cls_conn);
1574 }
1575 
1576 static void
1577 iscsi_tcp_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
1578 {
1579 	struct iscsi_conn *conn = cls_conn->dd_data;
1580 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1581 
1582 	/* userspace may have goofed up and not bound us */
1583 	if (!tcp_conn->sock)
1584 		return;
1585 	/*
1586 	 * Make sure our recv side is stopped.
1587 	 * Older tools called conn stop before ep_disconnect
1588 	 * so IO could still be coming in.
1589 	 */
1590 	write_lock_bh(&tcp_conn->sock->sk->sk_callback_lock);
1591 	set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
1592 	write_unlock_bh(&tcp_conn->sock->sk->sk_callback_lock);
1593 
1594 	iscsi_conn_stop(cls_conn, flag);
1595 	iscsi_tcp_release_conn(conn);
1596 }
1597 
1598 static int iscsi_tcp_get_addr(struct iscsi_conn *conn, struct socket *sock,
1599 			      char *buf, int *port,
1600 			      int (*getname)(struct socket *, struct sockaddr *,
1601 					int *addrlen))
1602 {
1603 	struct sockaddr_storage *addr;
1604 	struct sockaddr_in6 *sin6;
1605 	struct sockaddr_in *sin;
1606 	int rc = 0, len;
1607 
1608 	addr = kmalloc(sizeof(*addr), GFP_KERNEL);
1609 	if (!addr)
1610 		return -ENOMEM;
1611 
1612 	if (getname(sock, (struct sockaddr *) addr, &len)) {
1613 		rc = -ENODEV;
1614 		goto free_addr;
1615 	}
1616 
1617 	switch (addr->ss_family) {
1618 	case AF_INET:
1619 		sin = (struct sockaddr_in *)addr;
1620 		spin_lock_bh(&conn->session->lock);
1621 		sprintf(buf, NIPQUAD_FMT, NIPQUAD(sin->sin_addr.s_addr));
1622 		*port = be16_to_cpu(sin->sin_port);
1623 		spin_unlock_bh(&conn->session->lock);
1624 		break;
1625 	case AF_INET6:
1626 		sin6 = (struct sockaddr_in6 *)addr;
1627 		spin_lock_bh(&conn->session->lock);
1628 		sprintf(buf, NIP6_FMT, NIP6(sin6->sin6_addr));
1629 		*port = be16_to_cpu(sin6->sin6_port);
1630 		spin_unlock_bh(&conn->session->lock);
1631 		break;
1632 	}
1633 free_addr:
1634 	kfree(addr);
1635 	return rc;
1636 }
1637 
1638 static int
1639 iscsi_tcp_conn_bind(struct iscsi_cls_session *cls_session,
1640 		    struct iscsi_cls_conn *cls_conn, uint64_t transport_eph,
1641 		    int is_leading)
1642 {
1643 	struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
1644 	struct iscsi_host *ihost = shost_priv(shost);
1645 	struct iscsi_conn *conn = cls_conn->dd_data;
1646 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1647 	struct sock *sk;
1648 	struct socket *sock;
1649 	int err;
1650 
1651 	/* lookup for existing socket */
1652 	sock = sockfd_lookup((int)transport_eph, &err);
1653 	if (!sock) {
1654 		iscsi_conn_printk(KERN_ERR, conn,
1655 				  "sockfd_lookup failed %d\n", err);
1656 		return -EEXIST;
1657 	}
1658 	/*
1659 	 * copy these values now because if we drop the session
1660 	 * userspace may still want to query the values since we will
1661 	 * be using them for the reconnect
1662 	 */
1663 	err = iscsi_tcp_get_addr(conn, sock, conn->portal_address,
1664 				 &conn->portal_port, kernel_getpeername);
1665 	if (err)
1666 		goto free_socket;
1667 
1668 	err = iscsi_tcp_get_addr(conn, sock, ihost->local_address,
1669 				&ihost->local_port, kernel_getsockname);
1670 	if (err)
1671 		goto free_socket;
1672 
1673 	err = iscsi_conn_bind(cls_session, cls_conn, is_leading);
1674 	if (err)
1675 		goto free_socket;
1676 
1677 	/* bind iSCSI connection and socket */
1678 	tcp_conn->sock = sock;
1679 
1680 	/* setup Socket parameters */
1681 	sk = sock->sk;
1682 	sk->sk_reuse = 1;
1683 	sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
1684 	sk->sk_allocation = GFP_ATOMIC;
1685 
1686 	iscsi_conn_set_callbacks(conn);
1687 	tcp_conn->sendpage = tcp_conn->sock->ops->sendpage;
1688 	/*
1689 	 * set receive state machine into initial state
1690 	 */
1691 	iscsi_tcp_hdr_recv_prep(tcp_conn);
1692 	return 0;
1693 
1694 free_socket:
1695 	sockfd_put(sock);
1696 	return err;
1697 }
1698 
1699 static int
1700 iscsi_r2tpool_alloc(struct iscsi_session *session)
1701 {
1702 	int i;
1703 	int cmd_i;
1704 
1705 	/*
1706 	 * initialize per-task: R2T pool and xmit queue
1707 	 */
1708 	for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
1709 	        struct iscsi_task *task = session->cmds[cmd_i];
1710 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1711 
1712 		/*
1713 		 * pre-allocated x4 as much r2ts to handle race when
1714 		 * target acks DataOut faster than we data_xmit() queues
1715 		 * could replenish r2tqueue.
1716 		 */
1717 
1718 		/* R2T pool */
1719 		if (iscsi_pool_init(&tcp_task->r2tpool, session->max_r2t * 4, NULL,
1720 				    sizeof(struct iscsi_r2t_info))) {
1721 			goto r2t_alloc_fail;
1722 		}
1723 
1724 		/* R2T xmit queue */
1725 		tcp_task->r2tqueue = kfifo_alloc(
1726 		      session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL);
1727 		if (tcp_task->r2tqueue == ERR_PTR(-ENOMEM)) {
1728 			iscsi_pool_free(&tcp_task->r2tpool);
1729 			goto r2t_alloc_fail;
1730 		}
1731 	}
1732 
1733 	return 0;
1734 
1735 r2t_alloc_fail:
1736 	for (i = 0; i < cmd_i; i++) {
1737 		struct iscsi_task *task = session->cmds[i];
1738 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1739 
1740 		kfifo_free(tcp_task->r2tqueue);
1741 		iscsi_pool_free(&tcp_task->r2tpool);
1742 	}
1743 	return -ENOMEM;
1744 }
1745 
1746 static void
1747 iscsi_r2tpool_free(struct iscsi_session *session)
1748 {
1749 	int i;
1750 
1751 	for (i = 0; i < session->cmds_max; i++) {
1752 		struct iscsi_task *task = session->cmds[i];
1753 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1754 
1755 		kfifo_free(tcp_task->r2tqueue);
1756 		iscsi_pool_free(&tcp_task->r2tpool);
1757 	}
1758 }
1759 
1760 static int
1761 iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
1762 		     char *buf, int buflen)
1763 {
1764 	struct iscsi_conn *conn = cls_conn->dd_data;
1765 	struct iscsi_session *session = conn->session;
1766 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1767 	int value;
1768 
1769 	switch(param) {
1770 	case ISCSI_PARAM_HDRDGST_EN:
1771 		iscsi_set_param(cls_conn, param, buf, buflen);
1772 		break;
1773 	case ISCSI_PARAM_DATADGST_EN:
1774 		iscsi_set_param(cls_conn, param, buf, buflen);
1775 		tcp_conn->sendpage = conn->datadgst_en ?
1776 			sock_no_sendpage : tcp_conn->sock->ops->sendpage;
1777 		break;
1778 	case ISCSI_PARAM_MAX_R2T:
1779 		sscanf(buf, "%d", &value);
1780 		if (value <= 0 || !is_power_of_2(value))
1781 			return -EINVAL;
1782 		if (session->max_r2t == value)
1783 			break;
1784 		iscsi_r2tpool_free(session);
1785 		iscsi_set_param(cls_conn, param, buf, buflen);
1786 		if (iscsi_r2tpool_alloc(session))
1787 			return -ENOMEM;
1788 		break;
1789 	default:
1790 		return iscsi_set_param(cls_conn, param, buf, buflen);
1791 	}
1792 
1793 	return 0;
1794 }
1795 
1796 static int
1797 iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
1798 			 enum iscsi_param param, char *buf)
1799 {
1800 	struct iscsi_conn *conn = cls_conn->dd_data;
1801 	int len;
1802 
1803 	switch(param) {
1804 	case ISCSI_PARAM_CONN_PORT:
1805 		spin_lock_bh(&conn->session->lock);
1806 		len = sprintf(buf, "%hu\n", conn->portal_port);
1807 		spin_unlock_bh(&conn->session->lock);
1808 		break;
1809 	case ISCSI_PARAM_CONN_ADDRESS:
1810 		spin_lock_bh(&conn->session->lock);
1811 		len = sprintf(buf, "%s\n", conn->portal_address);
1812 		spin_unlock_bh(&conn->session->lock);
1813 		break;
1814 	default:
1815 		return iscsi_conn_get_param(cls_conn, param, buf);
1816 	}
1817 
1818 	return len;
1819 }
1820 
1821 static void
1822 iscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
1823 {
1824 	struct iscsi_conn *conn = cls_conn->dd_data;
1825 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1826 
1827 	stats->txdata_octets = conn->txdata_octets;
1828 	stats->rxdata_octets = conn->rxdata_octets;
1829 	stats->scsicmd_pdus = conn->scsicmd_pdus_cnt;
1830 	stats->dataout_pdus = conn->dataout_pdus_cnt;
1831 	stats->scsirsp_pdus = conn->scsirsp_pdus_cnt;
1832 	stats->datain_pdus = conn->datain_pdus_cnt;
1833 	stats->r2t_pdus = conn->r2t_pdus_cnt;
1834 	stats->tmfcmd_pdus = conn->tmfcmd_pdus_cnt;
1835 	stats->tmfrsp_pdus = conn->tmfrsp_pdus_cnt;
1836 	stats->custom_length = 3;
1837 	strcpy(stats->custom[0].desc, "tx_sendpage_failures");
1838 	stats->custom[0].value = tcp_conn->sendpage_failures_cnt;
1839 	strcpy(stats->custom[1].desc, "rx_discontiguous_hdr");
1840 	stats->custom[1].value = tcp_conn->discontiguous_hdr_cnt;
1841 	strcpy(stats->custom[2].desc, "eh_abort_cnt");
1842 	stats->custom[2].value = conn->eh_abort_cnt;
1843 }
1844 
1845 static struct iscsi_cls_session *
1846 iscsi_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max,
1847 			 uint16_t qdepth, uint32_t initial_cmdsn,
1848 			 uint32_t *hostno)
1849 {
1850 	struct iscsi_cls_session *cls_session;
1851 	struct iscsi_session *session;
1852 	struct Scsi_Host *shost;
1853 	int cmd_i;
1854 
1855 	if (ep) {
1856 		printk(KERN_ERR "iscsi_tcp: invalid ep %p.\n", ep);
1857 		return NULL;
1858 	}
1859 
1860 	shost = iscsi_host_alloc(&iscsi_sht, 0, qdepth);
1861 	if (!shost)
1862 		return NULL;
1863 	shost->transportt = iscsi_tcp_scsi_transport;
1864 	shost->max_lun = iscsi_max_lun;
1865 	shost->max_id = 0;
1866 	shost->max_channel = 0;
1867 	shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE;
1868 
1869 	if (iscsi_host_add(shost, NULL))
1870 		goto free_host;
1871 	*hostno = shost->host_no;
1872 
1873 	cls_session = iscsi_session_setup(&iscsi_tcp_transport, shost, cmds_max,
1874 					  sizeof(struct iscsi_tcp_task),
1875 					  initial_cmdsn, 0);
1876 	if (!cls_session)
1877 		goto remove_host;
1878 	session = cls_session->dd_data;
1879 
1880 	shost->can_queue = session->scsi_cmds_max;
1881 	for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
1882 		struct iscsi_task *task = session->cmds[cmd_i];
1883 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1884 
1885 		task->hdr = &tcp_task->hdr.cmd_hdr;
1886 		task->hdr_max = sizeof(tcp_task->hdr) - ISCSI_DIGEST_SIZE;
1887 	}
1888 
1889 	if (iscsi_r2tpool_alloc(session))
1890 		goto remove_session;
1891 	return cls_session;
1892 
1893 remove_session:
1894 	iscsi_session_teardown(cls_session);
1895 remove_host:
1896 	iscsi_host_remove(shost);
1897 free_host:
1898 	iscsi_host_free(shost);
1899 	return NULL;
1900 }
1901 
1902 static void iscsi_tcp_session_destroy(struct iscsi_cls_session *cls_session)
1903 {
1904 	struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
1905 
1906 	iscsi_r2tpool_free(cls_session->dd_data);
1907 
1908 	iscsi_host_remove(shost);
1909 	iscsi_host_free(shost);
1910 }
1911 
1912 static int iscsi_tcp_slave_configure(struct scsi_device *sdev)
1913 {
1914 	blk_queue_bounce_limit(sdev->request_queue, BLK_BOUNCE_ANY);
1915 	blk_queue_dma_alignment(sdev->request_queue, 0);
1916 	return 0;
1917 }
1918 
1919 static struct scsi_host_template iscsi_sht = {
1920 	.module			= THIS_MODULE,
1921 	.name			= "iSCSI Initiator over TCP/IP",
1922 	.queuecommand           = iscsi_queuecommand,
1923 	.change_queue_depth	= iscsi_change_queue_depth,
1924 	.can_queue		= ISCSI_DEF_XMIT_CMDS_MAX - 1,
1925 	.sg_tablesize		= 4096,
1926 	.max_sectors		= 0xFFFF,
1927 	.cmd_per_lun		= ISCSI_DEF_CMD_PER_LUN,
1928 	.eh_abort_handler       = iscsi_eh_abort,
1929 	.eh_device_reset_handler= iscsi_eh_device_reset,
1930 	.eh_host_reset_handler	= iscsi_eh_host_reset,
1931 	.use_clustering         = DISABLE_CLUSTERING,
1932 	.slave_configure        = iscsi_tcp_slave_configure,
1933 	.proc_name		= "iscsi_tcp",
1934 	.this_id		= -1,
1935 };
1936 
1937 static struct iscsi_transport iscsi_tcp_transport = {
1938 	.owner			= THIS_MODULE,
1939 	.name			= "tcp",
1940 	.caps			= CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST
1941 				  | CAP_DATADGST,
1942 	.param_mask		= ISCSI_MAX_RECV_DLENGTH |
1943 				  ISCSI_MAX_XMIT_DLENGTH |
1944 				  ISCSI_HDRDGST_EN |
1945 				  ISCSI_DATADGST_EN |
1946 				  ISCSI_INITIAL_R2T_EN |
1947 				  ISCSI_MAX_R2T |
1948 				  ISCSI_IMM_DATA_EN |
1949 				  ISCSI_FIRST_BURST |
1950 				  ISCSI_MAX_BURST |
1951 				  ISCSI_PDU_INORDER_EN |
1952 				  ISCSI_DATASEQ_INORDER_EN |
1953 				  ISCSI_ERL |
1954 				  ISCSI_CONN_PORT |
1955 				  ISCSI_CONN_ADDRESS |
1956 				  ISCSI_EXP_STATSN |
1957 				  ISCSI_PERSISTENT_PORT |
1958 				  ISCSI_PERSISTENT_ADDRESS |
1959 				  ISCSI_TARGET_NAME | ISCSI_TPGT |
1960 				  ISCSI_USERNAME | ISCSI_PASSWORD |
1961 				  ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN |
1962 				  ISCSI_FAST_ABORT | ISCSI_ABORT_TMO |
1963 				  ISCSI_LU_RESET_TMO |
1964 				  ISCSI_PING_TMO | ISCSI_RECV_TMO |
1965 				  ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME,
1966 	.host_param_mask	= ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS |
1967 				  ISCSI_HOST_INITIATOR_NAME |
1968 				  ISCSI_HOST_NETDEV_NAME,
1969 	/* session management */
1970 	.create_session		= iscsi_tcp_session_create,
1971 	.destroy_session	= iscsi_tcp_session_destroy,
1972 	/* connection management */
1973 	.create_conn		= iscsi_tcp_conn_create,
1974 	.bind_conn		= iscsi_tcp_conn_bind,
1975 	.destroy_conn		= iscsi_tcp_conn_destroy,
1976 	.set_param		= iscsi_conn_set_param,
1977 	.get_conn_param		= iscsi_tcp_conn_get_param,
1978 	.get_session_param	= iscsi_session_get_param,
1979 	.start_conn		= iscsi_conn_start,
1980 	.stop_conn		= iscsi_tcp_conn_stop,
1981 	/* iscsi host params */
1982 	.get_host_param		= iscsi_host_get_param,
1983 	.set_host_param		= iscsi_host_set_param,
1984 	/* IO */
1985 	.send_pdu		= iscsi_conn_send_pdu,
1986 	.get_stats		= iscsi_conn_get_stats,
1987 	.init_task		= iscsi_tcp_task_init,
1988 	.xmit_task		= iscsi_tcp_task_xmit,
1989 	.cleanup_task		= iscsi_tcp_cleanup_task,
1990 	/* recovery */
1991 	.session_recovery_timedout = iscsi_session_recovery_timedout,
1992 };
1993 
1994 static int __init
1995 iscsi_tcp_init(void)
1996 {
1997 	if (iscsi_max_lun < 1) {
1998 		printk(KERN_ERR "iscsi_tcp: Invalid max_lun value of %u\n",
1999 		       iscsi_max_lun);
2000 		return -EINVAL;
2001 	}
2002 
2003 	iscsi_tcp_scsi_transport = iscsi_register_transport(
2004 							&iscsi_tcp_transport);
2005 	if (!iscsi_tcp_scsi_transport)
2006 		return -ENODEV;
2007 
2008 	return 0;
2009 }
2010 
2011 static void __exit
2012 iscsi_tcp_exit(void)
2013 {
2014 	iscsi_unregister_transport(&iscsi_tcp_transport);
2015 }
2016 
2017 module_init(iscsi_tcp_init);
2018 module_exit(iscsi_tcp_exit);
2019