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