xref: /linux/drivers/scsi/iscsi_tcp.c (revision 367b8112fe2ea5c39a7bb4d263dcdd9b612fae18)
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_in - SCSI Data-In Response processing
527  * @conn: iscsi connection
528  * @task: scsi command task
529  **/
530 static int
531 iscsi_data_in(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 	int datasn = be32_to_cpu(rhdr->datasn);
537 	unsigned total_in_length = scsi_in(task->sc)->length;
538 
539 	iscsi_update_cmdsn(conn->session, (struct iscsi_nopin*)rhdr);
540 	if (tcp_conn->in.datalen == 0)
541 		return 0;
542 
543 	if (tcp_task->exp_datasn != datasn) {
544 		debug_tcp("%s: task->exp_datasn(%d) != rhdr->datasn(%d)\n",
545 		          __func__, tcp_task->exp_datasn, datasn);
546 		return ISCSI_ERR_DATASN;
547 	}
548 
549 	tcp_task->exp_datasn++;
550 
551 	tcp_task->data_offset = be32_to_cpu(rhdr->offset);
552 	if (tcp_task->data_offset + tcp_conn->in.datalen > total_in_length) {
553 		debug_tcp("%s: data_offset(%d) + data_len(%d) > total_length_in(%d)\n",
554 		          __func__, tcp_task->data_offset,
555 		          tcp_conn->in.datalen, total_in_length);
556 		return ISCSI_ERR_DATA_OFFSET;
557 	}
558 
559 	conn->datain_pdus_cnt++;
560 	return 0;
561 }
562 
563 /**
564  * iscsi_solicit_data_init - initialize first Data-Out
565  * @conn: iscsi connection
566  * @task: scsi command task
567  * @r2t: R2T info
568  *
569  * Notes:
570  *	Initialize first Data-Out within this R2T sequence and finds
571  *	proper data_offset within this SCSI command.
572  *
573  *	This function is called with connection lock taken.
574  **/
575 static void
576 iscsi_solicit_data_init(struct iscsi_conn *conn, struct iscsi_task *task,
577 			struct iscsi_r2t_info *r2t)
578 {
579 	struct iscsi_data *hdr;
580 
581 	hdr = &r2t->dtask.hdr;
582 	memset(hdr, 0, sizeof(struct iscsi_data));
583 	hdr->ttt = r2t->ttt;
584 	hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
585 	r2t->solicit_datasn++;
586 	hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
587 	memcpy(hdr->lun, task->hdr->lun, sizeof(hdr->lun));
588 	hdr->itt = task->hdr->itt;
589 	hdr->exp_statsn = r2t->exp_statsn;
590 	hdr->offset = cpu_to_be32(r2t->data_offset);
591 	if (r2t->data_length > conn->max_xmit_dlength) {
592 		hton24(hdr->dlength, conn->max_xmit_dlength);
593 		r2t->data_count = conn->max_xmit_dlength;
594 		hdr->flags = 0;
595 	} else {
596 		hton24(hdr->dlength, r2t->data_length);
597 		r2t->data_count = r2t->data_length;
598 		hdr->flags = ISCSI_FLAG_CMD_FINAL;
599 	}
600 	conn->dataout_pdus_cnt++;
601 
602 	r2t->sent = 0;
603 }
604 
605 /**
606  * iscsi_r2t_rsp - iSCSI R2T Response processing
607  * @conn: iscsi connection
608  * @task: scsi command task
609  **/
610 static int
611 iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
612 {
613 	struct iscsi_r2t_info *r2t;
614 	struct iscsi_session *session = conn->session;
615 	struct iscsi_tcp_task *tcp_task = task->dd_data;
616 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
617 	struct iscsi_r2t_rsp *rhdr = (struct iscsi_r2t_rsp *)tcp_conn->in.hdr;
618 	int r2tsn = be32_to_cpu(rhdr->r2tsn);
619 	int rc;
620 
621 	if (tcp_conn->in.datalen) {
622 		iscsi_conn_printk(KERN_ERR, conn,
623 				  "invalid R2t with datalen %d\n",
624 				  tcp_conn->in.datalen);
625 		return ISCSI_ERR_DATALEN;
626 	}
627 
628 	if (tcp_task->exp_datasn != r2tsn){
629 		debug_tcp("%s: task->exp_datasn(%d) != rhdr->r2tsn(%d)\n",
630 		          __func__, tcp_task->exp_datasn, r2tsn);
631 		return ISCSI_ERR_R2TSN;
632 	}
633 
634 	/* fill-in new R2T associated with the task */
635 	iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
636 
637 	if (!task->sc || session->state != ISCSI_STATE_LOGGED_IN) {
638 		iscsi_conn_printk(KERN_INFO, conn,
639 				  "dropping R2T itt %d in recovery.\n",
640 				  task->itt);
641 		return 0;
642 	}
643 
644 	rc = __kfifo_get(tcp_task->r2tpool.queue, (void*)&r2t, sizeof(void*));
645 	BUG_ON(!rc);
646 
647 	r2t->exp_statsn = rhdr->statsn;
648 	r2t->data_length = be32_to_cpu(rhdr->data_length);
649 	if (r2t->data_length == 0) {
650 		iscsi_conn_printk(KERN_ERR, conn,
651 				  "invalid R2T with zero data len\n");
652 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
653 			    sizeof(void*));
654 		return ISCSI_ERR_DATALEN;
655 	}
656 
657 	if (r2t->data_length > session->max_burst)
658 		debug_scsi("invalid R2T with data len %u and max burst %u."
659 			   "Attempting to execute request.\n",
660 			    r2t->data_length, session->max_burst);
661 
662 	r2t->data_offset = be32_to_cpu(rhdr->data_offset);
663 	if (r2t->data_offset + r2t->data_length > scsi_out(task->sc)->length) {
664 		iscsi_conn_printk(KERN_ERR, conn,
665 				  "invalid R2T with data len %u at offset %u "
666 				  "and total length %d\n", r2t->data_length,
667 				  r2t->data_offset, scsi_out(task->sc)->length);
668 		__kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t,
669 			    sizeof(void*));
670 		return ISCSI_ERR_DATALEN;
671 	}
672 
673 	r2t->ttt = rhdr->ttt; /* no flip */
674 	r2t->solicit_datasn = 0;
675 
676 	iscsi_solicit_data_init(conn, task, r2t);
677 
678 	tcp_task->exp_datasn = r2tsn + 1;
679 	__kfifo_put(tcp_task->r2tqueue, (void*)&r2t, sizeof(void*));
680 	conn->r2t_pdus_cnt++;
681 
682 	iscsi_requeue_task(task);
683 	return 0;
684 }
685 
686 /*
687  * Handle incoming reply to DataIn command
688  */
689 static int
690 iscsi_tcp_process_data_in(struct iscsi_tcp_conn *tcp_conn,
691 			  struct iscsi_segment *segment)
692 {
693 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
694 	struct iscsi_hdr *hdr = tcp_conn->in.hdr;
695 	int rc;
696 
697 	if (!iscsi_tcp_dgst_verify(tcp_conn, segment))
698 		return ISCSI_ERR_DATA_DGST;
699 
700 	/* check for non-exceptional status */
701 	if (hdr->flags & ISCSI_FLAG_DATA_STATUS) {
702 		rc = iscsi_complete_pdu(conn, tcp_conn->in.hdr, NULL, 0);
703 		if (rc)
704 			return rc;
705 	}
706 
707 	iscsi_tcp_hdr_recv_prep(tcp_conn);
708 	return 0;
709 }
710 
711 /**
712  * iscsi_tcp_hdr_dissect - process PDU header
713  * @conn: iSCSI connection
714  * @hdr: PDU header
715  *
716  * This function analyzes the header of the PDU received,
717  * and performs several sanity checks. If the PDU is accompanied
718  * by data, the receive buffer is set up to copy the incoming data
719  * to the correct location.
720  */
721 static int
722 iscsi_tcp_hdr_dissect(struct iscsi_conn *conn, struct iscsi_hdr *hdr)
723 {
724 	int rc = 0, opcode, ahslen;
725 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
726 	struct iscsi_task *task;
727 
728 	/* verify PDU length */
729 	tcp_conn->in.datalen = ntoh24(hdr->dlength);
730 	if (tcp_conn->in.datalen > conn->max_recv_dlength) {
731 		iscsi_conn_printk(KERN_ERR, conn,
732 				  "iscsi_tcp: datalen %d > %d\n",
733 				  tcp_conn->in.datalen, conn->max_recv_dlength);
734 		return ISCSI_ERR_DATALEN;
735 	}
736 
737 	/* Additional header segments. So far, we don't
738 	 * process additional headers.
739 	 */
740 	ahslen = hdr->hlength << 2;
741 
742 	opcode = hdr->opcode & ISCSI_OPCODE_MASK;
743 	/* verify itt (itt encoding: age+cid+itt) */
744 	rc = iscsi_verify_itt(conn, hdr->itt);
745 	if (rc)
746 		return rc;
747 
748 	debug_tcp("opcode 0x%x ahslen %d datalen %d\n",
749 		  opcode, ahslen, tcp_conn->in.datalen);
750 
751 	switch(opcode) {
752 	case ISCSI_OP_SCSI_DATA_IN:
753 		spin_lock(&conn->session->lock);
754 		task = iscsi_itt_to_ctask(conn, hdr->itt);
755 		if (!task)
756 			rc = ISCSI_ERR_BAD_ITT;
757 		else
758 			rc = iscsi_data_in(conn, task);
759 		if (rc) {
760 			spin_unlock(&conn->session->lock);
761 			break;
762 		}
763 
764 		if (tcp_conn->in.datalen) {
765 			struct iscsi_tcp_task *tcp_task = task->dd_data;
766 			struct hash_desc *rx_hash = NULL;
767 			struct scsi_data_buffer *sdb = scsi_in(task->sc);
768 
769 			/*
770 			 * Setup copy of Data-In into the Scsi_Cmnd
771 			 * Scatterlist case:
772 			 * We set up the iscsi_segment to point to the next
773 			 * scatterlist entry to copy to. As we go along,
774 			 * we move on to the next scatterlist entry and
775 			 * update the digest per-entry.
776 			 */
777 			if (conn->datadgst_en)
778 				rx_hash = &tcp_conn->rx_hash;
779 
780 			debug_tcp("iscsi_tcp_begin_data_in(%p, offset=%d, "
781 				  "datalen=%d)\n", tcp_conn,
782 				  tcp_task->data_offset,
783 				  tcp_conn->in.datalen);
784 			rc = iscsi_segment_seek_sg(&tcp_conn->in.segment,
785 						   sdb->table.sgl,
786 						   sdb->table.nents,
787 						   tcp_task->data_offset,
788 						   tcp_conn->in.datalen,
789 						   iscsi_tcp_process_data_in,
790 						   rx_hash);
791 			spin_unlock(&conn->session->lock);
792 			return rc;
793 		}
794 		rc = __iscsi_complete_pdu(conn, hdr, NULL, 0);
795 		spin_unlock(&conn->session->lock);
796 		break;
797 	case ISCSI_OP_SCSI_CMD_RSP:
798 		if (tcp_conn->in.datalen) {
799 			iscsi_tcp_data_recv_prep(tcp_conn);
800 			return 0;
801 		}
802 		rc = iscsi_complete_pdu(conn, hdr, NULL, 0);
803 		break;
804 	case ISCSI_OP_R2T:
805 		spin_lock(&conn->session->lock);
806 		task = iscsi_itt_to_ctask(conn, hdr->itt);
807 		if (!task)
808 			rc = ISCSI_ERR_BAD_ITT;
809 		else if (ahslen)
810 			rc = ISCSI_ERR_AHSLEN;
811 		else if (task->sc->sc_data_direction == DMA_TO_DEVICE)
812 			rc = iscsi_r2t_rsp(conn, task);
813 		else
814 			rc = ISCSI_ERR_PROTO;
815 		spin_unlock(&conn->session->lock);
816 		break;
817 	case ISCSI_OP_LOGIN_RSP:
818 	case ISCSI_OP_TEXT_RSP:
819 	case ISCSI_OP_REJECT:
820 	case ISCSI_OP_ASYNC_EVENT:
821 		/*
822 		 * It is possible that we could get a PDU with a buffer larger
823 		 * than 8K, but there are no targets that currently do this.
824 		 * For now we fail until we find a vendor that needs it
825 		 */
826 		if (ISCSI_DEF_MAX_RECV_SEG_LEN < tcp_conn->in.datalen) {
827 			iscsi_conn_printk(KERN_ERR, conn,
828 					  "iscsi_tcp: received buffer of "
829 					  "len %u but conn buffer is only %u "
830 					  "(opcode %0x)\n",
831 					  tcp_conn->in.datalen,
832 					  ISCSI_DEF_MAX_RECV_SEG_LEN, opcode);
833 			rc = ISCSI_ERR_PROTO;
834 			break;
835 		}
836 
837 		/* If there's data coming in with the response,
838 		 * receive it to the connection's buffer.
839 		 */
840 		if (tcp_conn->in.datalen) {
841 			iscsi_tcp_data_recv_prep(tcp_conn);
842 			return 0;
843 		}
844 	/* fall through */
845 	case ISCSI_OP_LOGOUT_RSP:
846 	case ISCSI_OP_NOOP_IN:
847 	case ISCSI_OP_SCSI_TMFUNC_RSP:
848 		rc = iscsi_complete_pdu(conn, hdr, NULL, 0);
849 		break;
850 	default:
851 		rc = ISCSI_ERR_BAD_OPCODE;
852 		break;
853 	}
854 
855 	if (rc == 0) {
856 		/* Anything that comes with data should have
857 		 * been handled above. */
858 		if (tcp_conn->in.datalen)
859 			return ISCSI_ERR_PROTO;
860 		iscsi_tcp_hdr_recv_prep(tcp_conn);
861 	}
862 
863 	return rc;
864 }
865 
866 /**
867  * iscsi_tcp_hdr_recv_done - process PDU header
868  *
869  * This is the callback invoked when the PDU header has
870  * been received. If the header is followed by additional
871  * header segments, we go back for more data.
872  */
873 static int
874 iscsi_tcp_hdr_recv_done(struct iscsi_tcp_conn *tcp_conn,
875 			struct iscsi_segment *segment)
876 {
877 	struct iscsi_conn *conn = tcp_conn->iscsi_conn;
878 	struct iscsi_hdr *hdr;
879 
880 	/* Check if there are additional header segments
881 	 * *prior* to computing the digest, because we
882 	 * may need to go back to the caller for more.
883 	 */
884 	hdr = (struct iscsi_hdr *) tcp_conn->in.hdr_buf;
885 	if (segment->copied == sizeof(struct iscsi_hdr) && hdr->hlength) {
886 		/* Bump the header length - the caller will
887 		 * just loop around and get the AHS for us, and
888 		 * call again. */
889 		unsigned int ahslen = hdr->hlength << 2;
890 
891 		/* Make sure we don't overflow */
892 		if (sizeof(*hdr) + ahslen > sizeof(tcp_conn->in.hdr_buf))
893 			return ISCSI_ERR_AHSLEN;
894 
895 		segment->total_size += ahslen;
896 		segment->size += ahslen;
897 		return 0;
898 	}
899 
900 	/* We're done processing the header. See if we're doing
901 	 * header digests; if so, set up the recv_digest buffer
902 	 * and go back for more. */
903 	if (conn->hdrdgst_en) {
904 		if (segment->digest_len == 0) {
905 			iscsi_tcp_segment_splice_digest(segment,
906 							segment->recv_digest);
907 			return 0;
908 		}
909 		iscsi_tcp_dgst_header(&tcp_conn->rx_hash, hdr,
910 				      segment->total_copied - ISCSI_DIGEST_SIZE,
911 				      segment->digest);
912 
913 		if (!iscsi_tcp_dgst_verify(tcp_conn, segment))
914 			return ISCSI_ERR_HDR_DGST;
915 	}
916 
917 	tcp_conn->in.hdr = hdr;
918 	return iscsi_tcp_hdr_dissect(conn, hdr);
919 }
920 
921 /**
922  * iscsi_tcp_recv - TCP receive in sendfile fashion
923  * @rd_desc: read descriptor
924  * @skb: socket buffer
925  * @offset: offset in skb
926  * @len: skb->len - offset
927  **/
928 static int
929 iscsi_tcp_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
930 	       unsigned int offset, size_t len)
931 {
932 	struct iscsi_conn *conn = rd_desc->arg.data;
933 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
934 	struct iscsi_segment *segment = &tcp_conn->in.segment;
935 	struct skb_seq_state seq;
936 	unsigned int consumed = 0;
937 	int rc = 0;
938 
939 	debug_tcp("in %d bytes\n", skb->len - offset);
940 
941 	if (unlikely(conn->suspend_rx)) {
942 		debug_tcp("conn %d Rx suspended!\n", conn->id);
943 		return 0;
944 	}
945 
946 	skb_prepare_seq_read(skb, offset, skb->len, &seq);
947 	while (1) {
948 		unsigned int avail;
949 		const u8 *ptr;
950 
951 		avail = skb_seq_read(consumed, &ptr, &seq);
952 		if (avail == 0) {
953 			debug_tcp("no more data avail. Consumed %d\n",
954 				  consumed);
955 			break;
956 		}
957 		BUG_ON(segment->copied >= segment->size);
958 
959 		debug_tcp("skb %p ptr=%p avail=%u\n", skb, ptr, avail);
960 		rc = iscsi_tcp_segment_recv(tcp_conn, segment, ptr, avail);
961 		BUG_ON(rc == 0);
962 		consumed += rc;
963 
964 		if (segment->total_copied >= segment->total_size) {
965 			debug_tcp("segment done\n");
966 			rc = segment->done(tcp_conn, segment);
967 			if (rc != 0) {
968 				skb_abort_seq_read(&seq);
969 				goto error;
970 			}
971 
972 			/* The done() functions sets up the
973 			 * next segment. */
974 		}
975 	}
976 	skb_abort_seq_read(&seq);
977 	conn->rxdata_octets += consumed;
978 	return consumed;
979 
980 error:
981 	debug_tcp("Error receiving PDU, errno=%d\n", rc);
982 	iscsi_conn_failure(conn, rc);
983 	return 0;
984 }
985 
986 static void
987 iscsi_tcp_data_ready(struct sock *sk, int flag)
988 {
989 	struct iscsi_conn *conn = sk->sk_user_data;
990 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
991 	read_descriptor_t rd_desc;
992 
993 	read_lock(&sk->sk_callback_lock);
994 
995 	/*
996 	 * Use rd_desc to pass 'conn' to iscsi_tcp_recv.
997 	 * We set count to 1 because we want the network layer to
998 	 * hand us all the skbs that are available. iscsi_tcp_recv
999 	 * handled pdus that cross buffers or pdus that still need data.
1000 	 */
1001 	rd_desc.arg.data = conn;
1002 	rd_desc.count = 1;
1003 	tcp_read_sock(sk, &rd_desc, iscsi_tcp_recv);
1004 
1005 	read_unlock(&sk->sk_callback_lock);
1006 
1007 	/* If we had to (atomically) map a highmem page,
1008 	 * unmap it now. */
1009 	iscsi_tcp_segment_unmap(&tcp_conn->in.segment);
1010 }
1011 
1012 static void
1013 iscsi_tcp_state_change(struct sock *sk)
1014 {
1015 	struct iscsi_tcp_conn *tcp_conn;
1016 	struct iscsi_conn *conn;
1017 	struct iscsi_session *session;
1018 	void (*old_state_change)(struct sock *);
1019 
1020 	read_lock(&sk->sk_callback_lock);
1021 
1022 	conn = (struct iscsi_conn*)sk->sk_user_data;
1023 	session = conn->session;
1024 
1025 	if ((sk->sk_state == TCP_CLOSE_WAIT ||
1026 	     sk->sk_state == TCP_CLOSE) &&
1027 	    !atomic_read(&sk->sk_rmem_alloc)) {
1028 		debug_tcp("iscsi_tcp_state_change: TCP_CLOSE|TCP_CLOSE_WAIT\n");
1029 		iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1030 	}
1031 
1032 	tcp_conn = conn->dd_data;
1033 	old_state_change = tcp_conn->old_state_change;
1034 
1035 	read_unlock(&sk->sk_callback_lock);
1036 
1037 	old_state_change(sk);
1038 }
1039 
1040 /**
1041  * iscsi_write_space - Called when more output buffer space is available
1042  * @sk: socket space is available for
1043  **/
1044 static void
1045 iscsi_write_space(struct sock *sk)
1046 {
1047 	struct iscsi_conn *conn = (struct iscsi_conn*)sk->sk_user_data;
1048 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1049 
1050 	tcp_conn->old_write_space(sk);
1051 	debug_tcp("iscsi_write_space: cid %d\n", conn->id);
1052 	scsi_queue_work(conn->session->host, &conn->xmitwork);
1053 }
1054 
1055 static void
1056 iscsi_conn_set_callbacks(struct iscsi_conn *conn)
1057 {
1058 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1059 	struct sock *sk = tcp_conn->sock->sk;
1060 
1061 	/* assign new callbacks */
1062 	write_lock_bh(&sk->sk_callback_lock);
1063 	sk->sk_user_data = conn;
1064 	tcp_conn->old_data_ready = sk->sk_data_ready;
1065 	tcp_conn->old_state_change = sk->sk_state_change;
1066 	tcp_conn->old_write_space = sk->sk_write_space;
1067 	sk->sk_data_ready = iscsi_tcp_data_ready;
1068 	sk->sk_state_change = iscsi_tcp_state_change;
1069 	sk->sk_write_space = iscsi_write_space;
1070 	write_unlock_bh(&sk->sk_callback_lock);
1071 }
1072 
1073 static void
1074 iscsi_conn_restore_callbacks(struct iscsi_tcp_conn *tcp_conn)
1075 {
1076 	struct sock *sk = tcp_conn->sock->sk;
1077 
1078 	/* restore socket callbacks, see also: iscsi_conn_set_callbacks() */
1079 	write_lock_bh(&sk->sk_callback_lock);
1080 	sk->sk_user_data    = NULL;
1081 	sk->sk_data_ready   = tcp_conn->old_data_ready;
1082 	sk->sk_state_change = tcp_conn->old_state_change;
1083 	sk->sk_write_space  = tcp_conn->old_write_space;
1084 	sk->sk_no_check	 = 0;
1085 	write_unlock_bh(&sk->sk_callback_lock);
1086 }
1087 
1088 /**
1089  * iscsi_xmit - TCP transmit
1090  **/
1091 static int
1092 iscsi_xmit(struct iscsi_conn *conn)
1093 {
1094 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1095 	struct iscsi_segment *segment = &tcp_conn->out.segment;
1096 	unsigned int consumed = 0;
1097 	int rc = 0;
1098 
1099 	while (1) {
1100 		rc = iscsi_tcp_xmit_segment(tcp_conn, segment);
1101 		if (rc < 0) {
1102 			rc = ISCSI_ERR_XMIT_FAILED;
1103 			goto error;
1104 		}
1105 		if (rc == 0)
1106 			break;
1107 
1108 		consumed += rc;
1109 
1110 		if (segment->total_copied >= segment->total_size) {
1111 			if (segment->done != NULL) {
1112 				rc = segment->done(tcp_conn, segment);
1113 				if (rc != 0)
1114 					goto error;
1115 			}
1116 		}
1117 	}
1118 
1119 	debug_tcp("xmit %d bytes\n", consumed);
1120 
1121 	conn->txdata_octets += consumed;
1122 	return consumed;
1123 
1124 error:
1125 	/* Transmit error. We could initiate error recovery
1126 	 * here. */
1127 	debug_tcp("Error sending PDU, errno=%d\n", rc);
1128 	iscsi_conn_failure(conn, rc);
1129 	return -EIO;
1130 }
1131 
1132 /**
1133  * iscsi_tcp_xmit_qlen - return the number of bytes queued for xmit
1134  */
1135 static inline int
1136 iscsi_tcp_xmit_qlen(struct iscsi_conn *conn)
1137 {
1138 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1139 	struct iscsi_segment *segment = &tcp_conn->out.segment;
1140 
1141 	return segment->total_copied - segment->total_size;
1142 }
1143 
1144 static inline int
1145 iscsi_tcp_flush(struct iscsi_conn *conn)
1146 {
1147 	int rc;
1148 
1149 	while (iscsi_tcp_xmit_qlen(conn)) {
1150 		rc = iscsi_xmit(conn);
1151 		if (rc == 0)
1152 			return -EAGAIN;
1153 		if (rc < 0)
1154 			return rc;
1155 	}
1156 
1157 	return 0;
1158 }
1159 
1160 /*
1161  * This is called when we're done sending the header.
1162  * Simply copy the data_segment to the send segment, and return.
1163  */
1164 static int
1165 iscsi_tcp_send_hdr_done(struct iscsi_tcp_conn *tcp_conn,
1166 			struct iscsi_segment *segment)
1167 {
1168 	tcp_conn->out.segment = tcp_conn->out.data_segment;
1169 	debug_tcp("Header done. Next segment size %u total_size %u\n",
1170 		  tcp_conn->out.segment.size, tcp_conn->out.segment.total_size);
1171 	return 0;
1172 }
1173 
1174 static void
1175 iscsi_tcp_send_hdr_prep(struct iscsi_conn *conn, void *hdr, size_t hdrlen)
1176 {
1177 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1178 
1179 	debug_tcp("%s(%p%s)\n", __func__, tcp_conn,
1180 			conn->hdrdgst_en? ", digest enabled" : "");
1181 
1182 	/* Clear the data segment - needs to be filled in by the
1183 	 * caller using iscsi_tcp_send_data_prep() */
1184 	memset(&tcp_conn->out.data_segment, 0, sizeof(struct iscsi_segment));
1185 
1186 	/* If header digest is enabled, compute the CRC and
1187 	 * place the digest into the same buffer. We make
1188 	 * sure that both iscsi_tcp_task and mtask have
1189 	 * sufficient room.
1190 	 */
1191 	if (conn->hdrdgst_en) {
1192 		iscsi_tcp_dgst_header(&tcp_conn->tx_hash, hdr, hdrlen,
1193 				      hdr + hdrlen);
1194 		hdrlen += ISCSI_DIGEST_SIZE;
1195 	}
1196 
1197 	/* Remember header pointer for later, when we need
1198 	 * to decide whether there's a payload to go along
1199 	 * with the header. */
1200 	tcp_conn->out.hdr = hdr;
1201 
1202 	iscsi_segment_init_linear(&tcp_conn->out.segment, hdr, hdrlen,
1203 				iscsi_tcp_send_hdr_done, NULL);
1204 }
1205 
1206 /*
1207  * Prepare the send buffer for the payload data.
1208  * Padding and checksumming will all be taken care
1209  * of by the iscsi_segment routines.
1210  */
1211 static int
1212 iscsi_tcp_send_data_prep(struct iscsi_conn *conn, struct scatterlist *sg,
1213 			 unsigned int count, unsigned int offset,
1214 			 unsigned int len)
1215 {
1216 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1217 	struct hash_desc *tx_hash = NULL;
1218 	unsigned int hdr_spec_len;
1219 
1220 	debug_tcp("%s(%p, offset=%d, datalen=%d%s)\n", __func__,
1221 			tcp_conn, offset, len,
1222 			conn->datadgst_en? ", digest enabled" : "");
1223 
1224 	/* Make sure the datalen matches what the caller
1225 	   said he would send. */
1226 	hdr_spec_len = ntoh24(tcp_conn->out.hdr->dlength);
1227 	WARN_ON(iscsi_padded(len) != iscsi_padded(hdr_spec_len));
1228 
1229 	if (conn->datadgst_en)
1230 		tx_hash = &tcp_conn->tx_hash;
1231 
1232 	return iscsi_segment_seek_sg(&tcp_conn->out.data_segment,
1233 				   sg, count, offset, len,
1234 				   NULL, tx_hash);
1235 }
1236 
1237 static void
1238 iscsi_tcp_send_linear_data_prepare(struct iscsi_conn *conn, void *data,
1239 				   size_t len)
1240 {
1241 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1242 	struct hash_desc *tx_hash = NULL;
1243 	unsigned int hdr_spec_len;
1244 
1245 	debug_tcp("%s(%p, datalen=%d%s)\n", __func__, tcp_conn, len,
1246 		  conn->datadgst_en? ", digest enabled" : "");
1247 
1248 	/* Make sure the datalen matches what the caller
1249 	   said he would send. */
1250 	hdr_spec_len = ntoh24(tcp_conn->out.hdr->dlength);
1251 	WARN_ON(iscsi_padded(len) != iscsi_padded(hdr_spec_len));
1252 
1253 	if (conn->datadgst_en)
1254 		tx_hash = &tcp_conn->tx_hash;
1255 
1256 	iscsi_segment_init_linear(&tcp_conn->out.data_segment,
1257 				data, len, NULL, tx_hash);
1258 }
1259 
1260 /**
1261  * iscsi_solicit_data_cont - initialize next Data-Out
1262  * @conn: iscsi connection
1263  * @task: scsi command task
1264  * @r2t: R2T info
1265  * @left: bytes left to transfer
1266  *
1267  * Notes:
1268  *	Initialize next Data-Out within this R2T sequence and continue
1269  *	to process next Scatter-Gather element(if any) of this SCSI command.
1270  *
1271  *	Called under connection lock.
1272  **/
1273 static int
1274 iscsi_solicit_data_cont(struct iscsi_conn *conn, struct iscsi_task *task,
1275 			struct iscsi_r2t_info *r2t)
1276 {
1277 	struct iscsi_data *hdr;
1278 	int new_offset, left;
1279 
1280 	BUG_ON(r2t->data_length - r2t->sent < 0);
1281 	left = r2t->data_length - r2t->sent;
1282 	if (left == 0)
1283 		return 0;
1284 
1285 	hdr = &r2t->dtask.hdr;
1286 	memset(hdr, 0, sizeof(struct iscsi_data));
1287 	hdr->ttt = r2t->ttt;
1288 	hdr->datasn = cpu_to_be32(r2t->solicit_datasn);
1289 	r2t->solicit_datasn++;
1290 	hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
1291 	memcpy(hdr->lun, task->hdr->lun, sizeof(hdr->lun));
1292 	hdr->itt = task->hdr->itt;
1293 	hdr->exp_statsn = r2t->exp_statsn;
1294 	new_offset = r2t->data_offset + r2t->sent;
1295 	hdr->offset = cpu_to_be32(new_offset);
1296 	if (left > conn->max_xmit_dlength) {
1297 		hton24(hdr->dlength, conn->max_xmit_dlength);
1298 		r2t->data_count = conn->max_xmit_dlength;
1299 	} else {
1300 		hton24(hdr->dlength, left);
1301 		r2t->data_count = left;
1302 		hdr->flags = ISCSI_FLAG_CMD_FINAL;
1303 	}
1304 
1305 	conn->dataout_pdus_cnt++;
1306 	return 1;
1307 }
1308 
1309 /**
1310  * iscsi_tcp_task - Initialize iSCSI SCSI_READ or SCSI_WRITE commands
1311  * @conn: iscsi connection
1312  * @task: scsi command task
1313  * @sc: scsi command
1314  **/
1315 static int
1316 iscsi_tcp_task_init(struct iscsi_task *task)
1317 {
1318 	struct iscsi_tcp_task *tcp_task = task->dd_data;
1319 	struct iscsi_conn *conn = task->conn;
1320 	struct scsi_cmnd *sc = task->sc;
1321 	int err;
1322 
1323 	if (!sc) {
1324 		/*
1325 		 * mgmt tasks do not have a scatterlist since they come
1326 		 * in from the iscsi interface.
1327 		 */
1328 		debug_scsi("mtask deq [cid %d itt 0x%x]\n", conn->id,
1329 			   task->itt);
1330 
1331 		/* Prepare PDU, optionally w/ immediate data */
1332 		iscsi_tcp_send_hdr_prep(conn, task->hdr, sizeof(*task->hdr));
1333 
1334 		/* If we have immediate data, attach a payload */
1335 		if (task->data_count)
1336 			iscsi_tcp_send_linear_data_prepare(conn, task->data,
1337 							   task->data_count);
1338 		return 0;
1339 	}
1340 
1341 	BUG_ON(__kfifo_len(tcp_task->r2tqueue));
1342 	tcp_task->sent = 0;
1343 	tcp_task->exp_datasn = 0;
1344 
1345 	/* Prepare PDU, optionally w/ immediate data */
1346 	debug_scsi("task deq [cid %d itt 0x%x imm %d unsol %d]\n",
1347 		    conn->id, task->itt, task->imm_count,
1348 		    task->unsol_count);
1349 	iscsi_tcp_send_hdr_prep(conn, task->hdr, task->hdr_len);
1350 
1351 	if (!task->imm_count)
1352 		return 0;
1353 
1354 	/* If we have immediate data, attach a payload */
1355 	err = iscsi_tcp_send_data_prep(conn, scsi_out(sc)->table.sgl,
1356 				       scsi_out(sc)->table.nents,
1357 				       0, task->imm_count);
1358 	if (err)
1359 		return err;
1360 	tcp_task->sent += task->imm_count;
1361 	task->imm_count = 0;
1362 	return 0;
1363 }
1364 
1365 /*
1366  * iscsi_tcp_task_xmit - xmit normal PDU task
1367  * @task: iscsi command task
1368  *
1369  * We're expected to return 0 when everything was transmitted succesfully,
1370  * -EAGAIN if there's still data in the queue, or != 0 for any other kind
1371  * of error.
1372  */
1373 static int
1374 iscsi_tcp_task_xmit(struct iscsi_task *task)
1375 {
1376 	struct iscsi_conn *conn = task->conn;
1377 	struct iscsi_tcp_task *tcp_task = task->dd_data;
1378 	struct scsi_cmnd *sc = task->sc;
1379 	struct scsi_data_buffer *sdb;
1380 	int rc = 0;
1381 
1382 flush:
1383 	/* Flush any pending data first. */
1384 	rc = iscsi_tcp_flush(conn);
1385 	if (rc < 0)
1386 		return rc;
1387 
1388 	/* mgmt command */
1389 	if (!sc) {
1390 		if (task->hdr->itt == RESERVED_ITT)
1391 			iscsi_put_task(task);
1392 		return 0;
1393 	}
1394 
1395 	/* Are we done already? */
1396 	if (sc->sc_data_direction != DMA_TO_DEVICE)
1397 		return 0;
1398 
1399 	sdb = scsi_out(sc);
1400 	if (task->unsol_count != 0) {
1401 		struct iscsi_data *hdr = &tcp_task->unsol_dtask.hdr;
1402 
1403 		/* Prepare a header for the unsolicited PDU.
1404 		 * The amount of data we want to send will be
1405 		 * in task->data_count.
1406 		 * FIXME: return the data count instead.
1407 		 */
1408 		iscsi_prep_unsolicit_data_pdu(task, hdr);
1409 
1410 		debug_tcp("unsol dout [itt 0x%x doff %d dlen %d]\n",
1411 				task->itt, tcp_task->sent, task->data_count);
1412 
1413 		iscsi_tcp_send_hdr_prep(conn, hdr, sizeof(*hdr));
1414 		rc = iscsi_tcp_send_data_prep(conn, sdb->table.sgl,
1415 					      sdb->table.nents, tcp_task->sent,
1416 					      task->data_count);
1417 		if (rc)
1418 			goto fail;
1419 		tcp_task->sent += task->data_count;
1420 		task->unsol_count -= task->data_count;
1421 		goto flush;
1422 	} else {
1423 		struct iscsi_session *session = conn->session;
1424 		struct iscsi_r2t_info *r2t;
1425 
1426 		/* All unsolicited PDUs sent. Check for solicited PDUs.
1427 		 */
1428 		spin_lock_bh(&session->lock);
1429 		r2t = tcp_task->r2t;
1430 		if (r2t != NULL) {
1431 			/* Continue with this R2T? */
1432 			if (!iscsi_solicit_data_cont(conn, task, r2t)) {
1433 				debug_scsi("  done with r2t %p\n", r2t);
1434 
1435 				__kfifo_put(tcp_task->r2tpool.queue,
1436 					    (void*)&r2t, sizeof(void*));
1437 				tcp_task->r2t = r2t = NULL;
1438 			}
1439 		}
1440 
1441 		if (r2t == NULL) {
1442 			__kfifo_get(tcp_task->r2tqueue, (void*)&tcp_task->r2t,
1443 				    sizeof(void*));
1444 			r2t = tcp_task->r2t;
1445 		}
1446 		spin_unlock_bh(&session->lock);
1447 
1448 		/* Waiting for more R2Ts to arrive. */
1449 		if (r2t == NULL) {
1450 			debug_tcp("no R2Ts yet\n");
1451 			return 0;
1452 		}
1453 
1454 		debug_scsi("sol dout %p [dsn %d itt 0x%x doff %d dlen %d]\n",
1455 			r2t, r2t->solicit_datasn - 1, task->itt,
1456 			r2t->data_offset + r2t->sent, r2t->data_count);
1457 
1458 		iscsi_tcp_send_hdr_prep(conn, &r2t->dtask.hdr,
1459 					sizeof(struct iscsi_hdr));
1460 
1461 		rc = iscsi_tcp_send_data_prep(conn, sdb->table.sgl,
1462 					      sdb->table.nents,
1463 					      r2t->data_offset + r2t->sent,
1464 					      r2t->data_count);
1465 		if (rc)
1466 			goto fail;
1467 		tcp_task->sent += r2t->data_count;
1468 		r2t->sent += r2t->data_count;
1469 		goto flush;
1470 	}
1471 	return 0;
1472 fail:
1473 	iscsi_conn_failure(conn, rc);
1474 	return -EIO;
1475 }
1476 
1477 static struct iscsi_cls_conn *
1478 iscsi_tcp_conn_create(struct iscsi_cls_session *cls_session, uint32_t conn_idx)
1479 {
1480 	struct iscsi_conn *conn;
1481 	struct iscsi_cls_conn *cls_conn;
1482 	struct iscsi_tcp_conn *tcp_conn;
1483 
1484 	cls_conn = iscsi_conn_setup(cls_session, sizeof(*tcp_conn), conn_idx);
1485 	if (!cls_conn)
1486 		return NULL;
1487 	conn = cls_conn->dd_data;
1488 	/*
1489 	 * due to strange issues with iser these are not set
1490 	 * in iscsi_conn_setup
1491 	 */
1492 	conn->max_recv_dlength = ISCSI_DEF_MAX_RECV_SEG_LEN;
1493 
1494 	tcp_conn = conn->dd_data;
1495 	tcp_conn->iscsi_conn = conn;
1496 
1497 	tcp_conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1498 						  CRYPTO_ALG_ASYNC);
1499 	tcp_conn->tx_hash.flags = 0;
1500 	if (IS_ERR(tcp_conn->tx_hash.tfm))
1501 		goto free_conn;
1502 
1503 	tcp_conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
1504 						  CRYPTO_ALG_ASYNC);
1505 	tcp_conn->rx_hash.flags = 0;
1506 	if (IS_ERR(tcp_conn->rx_hash.tfm))
1507 		goto free_tx_tfm;
1508 
1509 	return cls_conn;
1510 
1511 free_tx_tfm:
1512 	crypto_free_hash(tcp_conn->tx_hash.tfm);
1513 free_conn:
1514 	iscsi_conn_printk(KERN_ERR, conn,
1515 			  "Could not create connection due to crc32c "
1516 			  "loading error. Make sure the crc32c "
1517 			  "module is built as a module or into the "
1518 			  "kernel\n");
1519 	iscsi_conn_teardown(cls_conn);
1520 	return NULL;
1521 }
1522 
1523 static void
1524 iscsi_tcp_release_conn(struct iscsi_conn *conn)
1525 {
1526 	struct iscsi_session *session = conn->session;
1527 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1528 	struct socket *sock = tcp_conn->sock;
1529 
1530 	if (!sock)
1531 		return;
1532 
1533 	sock_hold(sock->sk);
1534 	iscsi_conn_restore_callbacks(tcp_conn);
1535 	sock_put(sock->sk);
1536 
1537 	spin_lock_bh(&session->lock);
1538 	tcp_conn->sock = NULL;
1539 	spin_unlock_bh(&session->lock);
1540 	sockfd_put(sock);
1541 }
1542 
1543 static void
1544 iscsi_tcp_conn_destroy(struct iscsi_cls_conn *cls_conn)
1545 {
1546 	struct iscsi_conn *conn = cls_conn->dd_data;
1547 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1548 
1549 	iscsi_tcp_release_conn(conn);
1550 
1551 	if (tcp_conn->tx_hash.tfm)
1552 		crypto_free_hash(tcp_conn->tx_hash.tfm);
1553 	if (tcp_conn->rx_hash.tfm)
1554 		crypto_free_hash(tcp_conn->rx_hash.tfm);
1555 
1556 	iscsi_conn_teardown(cls_conn);
1557 }
1558 
1559 static void
1560 iscsi_tcp_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
1561 {
1562 	struct iscsi_conn *conn = cls_conn->dd_data;
1563 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1564 
1565 	/* userspace may have goofed up and not bound us */
1566 	if (!tcp_conn->sock)
1567 		return;
1568 	/*
1569 	 * Make sure our recv side is stopped.
1570 	 * Older tools called conn stop before ep_disconnect
1571 	 * so IO could still be coming in.
1572 	 */
1573 	write_lock_bh(&tcp_conn->sock->sk->sk_callback_lock);
1574 	set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
1575 	write_unlock_bh(&tcp_conn->sock->sk->sk_callback_lock);
1576 
1577 	iscsi_conn_stop(cls_conn, flag);
1578 	iscsi_tcp_release_conn(conn);
1579 }
1580 
1581 static int iscsi_tcp_get_addr(struct iscsi_conn *conn, struct socket *sock,
1582 			      char *buf, int *port,
1583 			      int (*getname)(struct socket *, struct sockaddr *,
1584 					int *addrlen))
1585 {
1586 	struct sockaddr_storage *addr;
1587 	struct sockaddr_in6 *sin6;
1588 	struct sockaddr_in *sin;
1589 	int rc = 0, len;
1590 
1591 	addr = kmalloc(sizeof(*addr), GFP_KERNEL);
1592 	if (!addr)
1593 		return -ENOMEM;
1594 
1595 	if (getname(sock, (struct sockaddr *) addr, &len)) {
1596 		rc = -ENODEV;
1597 		goto free_addr;
1598 	}
1599 
1600 	switch (addr->ss_family) {
1601 	case AF_INET:
1602 		sin = (struct sockaddr_in *)addr;
1603 		spin_lock_bh(&conn->session->lock);
1604 		sprintf(buf, NIPQUAD_FMT, NIPQUAD(sin->sin_addr.s_addr));
1605 		*port = be16_to_cpu(sin->sin_port);
1606 		spin_unlock_bh(&conn->session->lock);
1607 		break;
1608 	case AF_INET6:
1609 		sin6 = (struct sockaddr_in6 *)addr;
1610 		spin_lock_bh(&conn->session->lock);
1611 		sprintf(buf, NIP6_FMT, NIP6(sin6->sin6_addr));
1612 		*port = be16_to_cpu(sin6->sin6_port);
1613 		spin_unlock_bh(&conn->session->lock);
1614 		break;
1615 	}
1616 free_addr:
1617 	kfree(addr);
1618 	return rc;
1619 }
1620 
1621 static int
1622 iscsi_tcp_conn_bind(struct iscsi_cls_session *cls_session,
1623 		    struct iscsi_cls_conn *cls_conn, uint64_t transport_eph,
1624 		    int is_leading)
1625 {
1626 	struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
1627 	struct iscsi_host *ihost = shost_priv(shost);
1628 	struct iscsi_conn *conn = cls_conn->dd_data;
1629 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1630 	struct sock *sk;
1631 	struct socket *sock;
1632 	int err;
1633 
1634 	/* lookup for existing socket */
1635 	sock = sockfd_lookup((int)transport_eph, &err);
1636 	if (!sock) {
1637 		iscsi_conn_printk(KERN_ERR, conn,
1638 				  "sockfd_lookup failed %d\n", err);
1639 		return -EEXIST;
1640 	}
1641 	/*
1642 	 * copy these values now because if we drop the session
1643 	 * userspace may still want to query the values since we will
1644 	 * be using them for the reconnect
1645 	 */
1646 	err = iscsi_tcp_get_addr(conn, sock, conn->portal_address,
1647 				 &conn->portal_port, kernel_getpeername);
1648 	if (err)
1649 		goto free_socket;
1650 
1651 	err = iscsi_tcp_get_addr(conn, sock, ihost->local_address,
1652 				&ihost->local_port, kernel_getsockname);
1653 	if (err)
1654 		goto free_socket;
1655 
1656 	err = iscsi_conn_bind(cls_session, cls_conn, is_leading);
1657 	if (err)
1658 		goto free_socket;
1659 
1660 	/* bind iSCSI connection and socket */
1661 	tcp_conn->sock = sock;
1662 
1663 	/* setup Socket parameters */
1664 	sk = sock->sk;
1665 	sk->sk_reuse = 1;
1666 	sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
1667 	sk->sk_allocation = GFP_ATOMIC;
1668 
1669 	iscsi_conn_set_callbacks(conn);
1670 	tcp_conn->sendpage = tcp_conn->sock->ops->sendpage;
1671 	/*
1672 	 * set receive state machine into initial state
1673 	 */
1674 	iscsi_tcp_hdr_recv_prep(tcp_conn);
1675 	return 0;
1676 
1677 free_socket:
1678 	sockfd_put(sock);
1679 	return err;
1680 }
1681 
1682 static int
1683 iscsi_r2tpool_alloc(struct iscsi_session *session)
1684 {
1685 	int i;
1686 	int cmd_i;
1687 
1688 	/*
1689 	 * initialize per-task: R2T pool and xmit queue
1690 	 */
1691 	for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
1692 	        struct iscsi_task *task = session->cmds[cmd_i];
1693 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1694 
1695 		/*
1696 		 * pre-allocated x4 as much r2ts to handle race when
1697 		 * target acks DataOut faster than we data_xmit() queues
1698 		 * could replenish r2tqueue.
1699 		 */
1700 
1701 		/* R2T pool */
1702 		if (iscsi_pool_init(&tcp_task->r2tpool, session->max_r2t * 4, NULL,
1703 				    sizeof(struct iscsi_r2t_info))) {
1704 			goto r2t_alloc_fail;
1705 		}
1706 
1707 		/* R2T xmit queue */
1708 		tcp_task->r2tqueue = kfifo_alloc(
1709 		      session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL);
1710 		if (tcp_task->r2tqueue == ERR_PTR(-ENOMEM)) {
1711 			iscsi_pool_free(&tcp_task->r2tpool);
1712 			goto r2t_alloc_fail;
1713 		}
1714 	}
1715 
1716 	return 0;
1717 
1718 r2t_alloc_fail:
1719 	for (i = 0; i < cmd_i; i++) {
1720 		struct iscsi_task *task = session->cmds[i];
1721 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1722 
1723 		kfifo_free(tcp_task->r2tqueue);
1724 		iscsi_pool_free(&tcp_task->r2tpool);
1725 	}
1726 	return -ENOMEM;
1727 }
1728 
1729 static void
1730 iscsi_r2tpool_free(struct iscsi_session *session)
1731 {
1732 	int i;
1733 
1734 	for (i = 0; i < session->cmds_max; i++) {
1735 		struct iscsi_task *task = session->cmds[i];
1736 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1737 
1738 		kfifo_free(tcp_task->r2tqueue);
1739 		iscsi_pool_free(&tcp_task->r2tpool);
1740 	}
1741 }
1742 
1743 static int
1744 iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param,
1745 		     char *buf, int buflen)
1746 {
1747 	struct iscsi_conn *conn = cls_conn->dd_data;
1748 	struct iscsi_session *session = conn->session;
1749 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1750 	int value;
1751 
1752 	switch(param) {
1753 	case ISCSI_PARAM_HDRDGST_EN:
1754 		iscsi_set_param(cls_conn, param, buf, buflen);
1755 		break;
1756 	case ISCSI_PARAM_DATADGST_EN:
1757 		iscsi_set_param(cls_conn, param, buf, buflen);
1758 		tcp_conn->sendpage = conn->datadgst_en ?
1759 			sock_no_sendpage : tcp_conn->sock->ops->sendpage;
1760 		break;
1761 	case ISCSI_PARAM_MAX_R2T:
1762 		sscanf(buf, "%d", &value);
1763 		if (value <= 0 || !is_power_of_2(value))
1764 			return -EINVAL;
1765 		if (session->max_r2t == value)
1766 			break;
1767 		iscsi_r2tpool_free(session);
1768 		iscsi_set_param(cls_conn, param, buf, buflen);
1769 		if (iscsi_r2tpool_alloc(session))
1770 			return -ENOMEM;
1771 		break;
1772 	default:
1773 		return iscsi_set_param(cls_conn, param, buf, buflen);
1774 	}
1775 
1776 	return 0;
1777 }
1778 
1779 static int
1780 iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
1781 			 enum iscsi_param param, char *buf)
1782 {
1783 	struct iscsi_conn *conn = cls_conn->dd_data;
1784 	int len;
1785 
1786 	switch(param) {
1787 	case ISCSI_PARAM_CONN_PORT:
1788 		spin_lock_bh(&conn->session->lock);
1789 		len = sprintf(buf, "%hu\n", conn->portal_port);
1790 		spin_unlock_bh(&conn->session->lock);
1791 		break;
1792 	case ISCSI_PARAM_CONN_ADDRESS:
1793 		spin_lock_bh(&conn->session->lock);
1794 		len = sprintf(buf, "%s\n", conn->portal_address);
1795 		spin_unlock_bh(&conn->session->lock);
1796 		break;
1797 	default:
1798 		return iscsi_conn_get_param(cls_conn, param, buf);
1799 	}
1800 
1801 	return len;
1802 }
1803 
1804 static void
1805 iscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
1806 {
1807 	struct iscsi_conn *conn = cls_conn->dd_data;
1808 	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
1809 
1810 	stats->txdata_octets = conn->txdata_octets;
1811 	stats->rxdata_octets = conn->rxdata_octets;
1812 	stats->scsicmd_pdus = conn->scsicmd_pdus_cnt;
1813 	stats->dataout_pdus = conn->dataout_pdus_cnt;
1814 	stats->scsirsp_pdus = conn->scsirsp_pdus_cnt;
1815 	stats->datain_pdus = conn->datain_pdus_cnt;
1816 	stats->r2t_pdus = conn->r2t_pdus_cnt;
1817 	stats->tmfcmd_pdus = conn->tmfcmd_pdus_cnt;
1818 	stats->tmfrsp_pdus = conn->tmfrsp_pdus_cnt;
1819 	stats->custom_length = 3;
1820 	strcpy(stats->custom[0].desc, "tx_sendpage_failures");
1821 	stats->custom[0].value = tcp_conn->sendpage_failures_cnt;
1822 	strcpy(stats->custom[1].desc, "rx_discontiguous_hdr");
1823 	stats->custom[1].value = tcp_conn->discontiguous_hdr_cnt;
1824 	strcpy(stats->custom[2].desc, "eh_abort_cnt");
1825 	stats->custom[2].value = conn->eh_abort_cnt;
1826 }
1827 
1828 static struct iscsi_cls_session *
1829 iscsi_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max,
1830 			 uint16_t qdepth, uint32_t initial_cmdsn,
1831 			 uint32_t *hostno)
1832 {
1833 	struct iscsi_cls_session *cls_session;
1834 	struct iscsi_session *session;
1835 	struct Scsi_Host *shost;
1836 	int cmd_i;
1837 
1838 	if (ep) {
1839 		printk(KERN_ERR "iscsi_tcp: invalid ep %p.\n", ep);
1840 		return NULL;
1841 	}
1842 
1843 	shost = iscsi_host_alloc(&iscsi_sht, 0, qdepth);
1844 	if (!shost)
1845 		return NULL;
1846 	shost->transportt = iscsi_tcp_scsi_transport;
1847 	shost->max_lun = iscsi_max_lun;
1848 	shost->max_id = 0;
1849 	shost->max_channel = 0;
1850 	shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE;
1851 
1852 	if (iscsi_host_add(shost, NULL))
1853 		goto free_host;
1854 	*hostno = shost->host_no;
1855 
1856 	cls_session = iscsi_session_setup(&iscsi_tcp_transport, shost, cmds_max,
1857 					  sizeof(struct iscsi_tcp_task),
1858 					  initial_cmdsn, 0);
1859 	if (!cls_session)
1860 		goto remove_host;
1861 	session = cls_session->dd_data;
1862 
1863 	shost->can_queue = session->scsi_cmds_max;
1864 	for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
1865 		struct iscsi_task *task = session->cmds[cmd_i];
1866 		struct iscsi_tcp_task *tcp_task = task->dd_data;
1867 
1868 		task->hdr = &tcp_task->hdr.cmd_hdr;
1869 		task->hdr_max = sizeof(tcp_task->hdr) - ISCSI_DIGEST_SIZE;
1870 	}
1871 
1872 	if (iscsi_r2tpool_alloc(session))
1873 		goto remove_session;
1874 	return cls_session;
1875 
1876 remove_session:
1877 	iscsi_session_teardown(cls_session);
1878 remove_host:
1879 	iscsi_host_remove(shost);
1880 free_host:
1881 	iscsi_host_free(shost);
1882 	return NULL;
1883 }
1884 
1885 static void iscsi_tcp_session_destroy(struct iscsi_cls_session *cls_session)
1886 {
1887 	struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
1888 
1889 	iscsi_r2tpool_free(cls_session->dd_data);
1890 	iscsi_session_teardown(cls_session);
1891 
1892 	iscsi_host_remove(shost);
1893 	iscsi_host_free(shost);
1894 }
1895 
1896 static int iscsi_tcp_slave_configure(struct scsi_device *sdev)
1897 {
1898 	blk_queue_bounce_limit(sdev->request_queue, BLK_BOUNCE_ANY);
1899 	blk_queue_dma_alignment(sdev->request_queue, 0);
1900 	return 0;
1901 }
1902 
1903 static struct scsi_host_template iscsi_sht = {
1904 	.module			= THIS_MODULE,
1905 	.name			= "iSCSI Initiator over TCP/IP",
1906 	.queuecommand           = iscsi_queuecommand,
1907 	.change_queue_depth	= iscsi_change_queue_depth,
1908 	.can_queue		= ISCSI_DEF_XMIT_CMDS_MAX - 1,
1909 	.sg_tablesize		= 4096,
1910 	.max_sectors		= 0xFFFF,
1911 	.cmd_per_lun		= ISCSI_DEF_CMD_PER_LUN,
1912 	.eh_abort_handler       = iscsi_eh_abort,
1913 	.eh_device_reset_handler= iscsi_eh_device_reset,
1914 	.eh_target_reset_handler= iscsi_eh_target_reset,
1915 	.use_clustering         = DISABLE_CLUSTERING,
1916 	.slave_configure        = iscsi_tcp_slave_configure,
1917 	.proc_name		= "iscsi_tcp",
1918 	.this_id		= -1,
1919 };
1920 
1921 static struct iscsi_transport iscsi_tcp_transport = {
1922 	.owner			= THIS_MODULE,
1923 	.name			= "tcp",
1924 	.caps			= CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST
1925 				  | CAP_DATADGST,
1926 	.param_mask		= ISCSI_MAX_RECV_DLENGTH |
1927 				  ISCSI_MAX_XMIT_DLENGTH |
1928 				  ISCSI_HDRDGST_EN |
1929 				  ISCSI_DATADGST_EN |
1930 				  ISCSI_INITIAL_R2T_EN |
1931 				  ISCSI_MAX_R2T |
1932 				  ISCSI_IMM_DATA_EN |
1933 				  ISCSI_FIRST_BURST |
1934 				  ISCSI_MAX_BURST |
1935 				  ISCSI_PDU_INORDER_EN |
1936 				  ISCSI_DATASEQ_INORDER_EN |
1937 				  ISCSI_ERL |
1938 				  ISCSI_CONN_PORT |
1939 				  ISCSI_CONN_ADDRESS |
1940 				  ISCSI_EXP_STATSN |
1941 				  ISCSI_PERSISTENT_PORT |
1942 				  ISCSI_PERSISTENT_ADDRESS |
1943 				  ISCSI_TARGET_NAME | ISCSI_TPGT |
1944 				  ISCSI_USERNAME | ISCSI_PASSWORD |
1945 				  ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN |
1946 				  ISCSI_FAST_ABORT | ISCSI_ABORT_TMO |
1947 				  ISCSI_LU_RESET_TMO |
1948 				  ISCSI_PING_TMO | ISCSI_RECV_TMO |
1949 				  ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME,
1950 	.host_param_mask	= ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS |
1951 				  ISCSI_HOST_INITIATOR_NAME |
1952 				  ISCSI_HOST_NETDEV_NAME,
1953 	/* session management */
1954 	.create_session		= iscsi_tcp_session_create,
1955 	.destroy_session	= iscsi_tcp_session_destroy,
1956 	/* connection management */
1957 	.create_conn		= iscsi_tcp_conn_create,
1958 	.bind_conn		= iscsi_tcp_conn_bind,
1959 	.destroy_conn		= iscsi_tcp_conn_destroy,
1960 	.set_param		= iscsi_conn_set_param,
1961 	.get_conn_param		= iscsi_tcp_conn_get_param,
1962 	.get_session_param	= iscsi_session_get_param,
1963 	.start_conn		= iscsi_conn_start,
1964 	.stop_conn		= iscsi_tcp_conn_stop,
1965 	/* iscsi host params */
1966 	.get_host_param		= iscsi_host_get_param,
1967 	.set_host_param		= iscsi_host_set_param,
1968 	/* IO */
1969 	.send_pdu		= iscsi_conn_send_pdu,
1970 	.get_stats		= iscsi_conn_get_stats,
1971 	.init_task		= iscsi_tcp_task_init,
1972 	.xmit_task		= iscsi_tcp_task_xmit,
1973 	.cleanup_task		= iscsi_tcp_cleanup_task,
1974 	/* recovery */
1975 	.session_recovery_timedout = iscsi_session_recovery_timedout,
1976 };
1977 
1978 static int __init
1979 iscsi_tcp_init(void)
1980 {
1981 	if (iscsi_max_lun < 1) {
1982 		printk(KERN_ERR "iscsi_tcp: Invalid max_lun value of %u\n",
1983 		       iscsi_max_lun);
1984 		return -EINVAL;
1985 	}
1986 
1987 	iscsi_tcp_scsi_transport = iscsi_register_transport(
1988 							&iscsi_tcp_transport);
1989 	if (!iscsi_tcp_scsi_transport)
1990 		return -ENODEV;
1991 
1992 	return 0;
1993 }
1994 
1995 static void __exit
1996 iscsi_tcp_exit(void)
1997 {
1998 	iscsi_unregister_transport(&iscsi_tcp_transport);
1999 }
2000 
2001 module_init(iscsi_tcp_init);
2002 module_exit(iscsi_tcp_exit);
2003