1 /*******************************************************************************
2  * This file contains the iSCSI Target specific utility functions.
3  *
4  * (c) Copyright 2007-2013 Datera, Inc.
5  *
6  * Author: Nicholas A. Bellinger <nab@linux-iscsi.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  ******************************************************************************/
18 
19 #include <linux/list.h>
20 #include <linux/percpu_ida.h>
21 #include <scsi/scsi_tcq.h>
22 #include <scsi/iscsi_proto.h>
23 #include <target/target_core_base.h>
24 #include <target/target_core_fabric.h>
25 #include <target/target_core_configfs.h>
26 #include <target/iscsi/iscsi_transport.h>
27 
28 #include "iscsi_target_core.h"
29 #include "iscsi_target_parameters.h"
30 #include "iscsi_target_seq_pdu_list.h"
31 #include "iscsi_target_datain_values.h"
32 #include "iscsi_target_erl0.h"
33 #include "iscsi_target_erl1.h"
34 #include "iscsi_target_erl2.h"
35 #include "iscsi_target_tpg.h"
36 #include "iscsi_target_tq.h"
37 #include "iscsi_target_util.h"
38 #include "iscsi_target.h"
39 
40 #define PRINT_BUFF(buff, len)					\
41 {								\
42 	int zzz;						\
43 								\
44 	pr_debug("%d:\n", __LINE__);				\
45 	for (zzz = 0; zzz < len; zzz++) {			\
46 		if (zzz % 16 == 0) {				\
47 			if (zzz)				\
48 				pr_debug("\n");			\
49 			pr_debug("%4i: ", zzz);			\
50 		}						\
51 		pr_debug("%02x ", (unsigned char) (buff)[zzz]);	\
52 	}							\
53 	if ((len + 1) % 16)					\
54 		pr_debug("\n");					\
55 }
56 
57 extern struct list_head g_tiqn_list;
58 extern spinlock_t tiqn_lock;
59 
60 /*
61  *	Called with cmd->r2t_lock held.
62  */
63 int iscsit_add_r2t_to_list(
64 	struct iscsi_cmd *cmd,
65 	u32 offset,
66 	u32 xfer_len,
67 	int recovery,
68 	u32 r2t_sn)
69 {
70 	struct iscsi_r2t *r2t;
71 
72 	r2t = kmem_cache_zalloc(lio_r2t_cache, GFP_ATOMIC);
73 	if (!r2t) {
74 		pr_err("Unable to allocate memory for struct iscsi_r2t.\n");
75 		return -1;
76 	}
77 	INIT_LIST_HEAD(&r2t->r2t_list);
78 
79 	r2t->recovery_r2t = recovery;
80 	r2t->r2t_sn = (!r2t_sn) ? cmd->r2t_sn++ : r2t_sn;
81 	r2t->offset = offset;
82 	r2t->xfer_len = xfer_len;
83 	list_add_tail(&r2t->r2t_list, &cmd->cmd_r2t_list);
84 	spin_unlock_bh(&cmd->r2t_lock);
85 
86 	iscsit_add_cmd_to_immediate_queue(cmd, cmd->conn, ISTATE_SEND_R2T);
87 
88 	spin_lock_bh(&cmd->r2t_lock);
89 	return 0;
90 }
91 
92 struct iscsi_r2t *iscsit_get_r2t_for_eos(
93 	struct iscsi_cmd *cmd,
94 	u32 offset,
95 	u32 length)
96 {
97 	struct iscsi_r2t *r2t;
98 
99 	spin_lock_bh(&cmd->r2t_lock);
100 	list_for_each_entry(r2t, &cmd->cmd_r2t_list, r2t_list) {
101 		if ((r2t->offset <= offset) &&
102 		    (r2t->offset + r2t->xfer_len) >= (offset + length)) {
103 			spin_unlock_bh(&cmd->r2t_lock);
104 			return r2t;
105 		}
106 	}
107 	spin_unlock_bh(&cmd->r2t_lock);
108 
109 	pr_err("Unable to locate R2T for Offset: %u, Length:"
110 			" %u\n", offset, length);
111 	return NULL;
112 }
113 
114 struct iscsi_r2t *iscsit_get_r2t_from_list(struct iscsi_cmd *cmd)
115 {
116 	struct iscsi_r2t *r2t;
117 
118 	spin_lock_bh(&cmd->r2t_lock);
119 	list_for_each_entry(r2t, &cmd->cmd_r2t_list, r2t_list) {
120 		if (!r2t->sent_r2t) {
121 			spin_unlock_bh(&cmd->r2t_lock);
122 			return r2t;
123 		}
124 	}
125 	spin_unlock_bh(&cmd->r2t_lock);
126 
127 	pr_err("Unable to locate next R2T to send for ITT:"
128 			" 0x%08x.\n", cmd->init_task_tag);
129 	return NULL;
130 }
131 
132 /*
133  *	Called with cmd->r2t_lock held.
134  */
135 void iscsit_free_r2t(struct iscsi_r2t *r2t, struct iscsi_cmd *cmd)
136 {
137 	list_del(&r2t->r2t_list);
138 	kmem_cache_free(lio_r2t_cache, r2t);
139 }
140 
141 void iscsit_free_r2ts_from_list(struct iscsi_cmd *cmd)
142 {
143 	struct iscsi_r2t *r2t, *r2t_tmp;
144 
145 	spin_lock_bh(&cmd->r2t_lock);
146 	list_for_each_entry_safe(r2t, r2t_tmp, &cmd->cmd_r2t_list, r2t_list)
147 		iscsit_free_r2t(r2t, cmd);
148 	spin_unlock_bh(&cmd->r2t_lock);
149 }
150 
151 /*
152  * May be called from software interrupt (timer) context for allocating
153  * iSCSI NopINs.
154  */
155 struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *conn, gfp_t gfp_mask)
156 {
157 	struct iscsi_cmd *cmd;
158 	struct se_session *se_sess = conn->sess->se_sess;
159 	int size, tag;
160 
161 	tag = percpu_ida_alloc(&se_sess->sess_tag_pool, gfp_mask);
162 	size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size;
163 	cmd = (struct iscsi_cmd *)(se_sess->sess_cmd_map + (tag * size));
164 	memset(cmd, 0, size);
165 
166 	cmd->se_cmd.map_tag = tag;
167 	cmd->conn = conn;
168 	INIT_LIST_HEAD(&cmd->i_conn_node);
169 	INIT_LIST_HEAD(&cmd->datain_list);
170 	INIT_LIST_HEAD(&cmd->cmd_r2t_list);
171 	spin_lock_init(&cmd->datain_lock);
172 	spin_lock_init(&cmd->dataout_timeout_lock);
173 	spin_lock_init(&cmd->istate_lock);
174 	spin_lock_init(&cmd->error_lock);
175 	spin_lock_init(&cmd->r2t_lock);
176 
177 	return cmd;
178 }
179 EXPORT_SYMBOL(iscsit_allocate_cmd);
180 
181 struct iscsi_seq *iscsit_get_seq_holder_for_datain(
182 	struct iscsi_cmd *cmd,
183 	u32 seq_send_order)
184 {
185 	u32 i;
186 
187 	for (i = 0; i < cmd->seq_count; i++)
188 		if (cmd->seq_list[i].seq_send_order == seq_send_order)
189 			return &cmd->seq_list[i];
190 
191 	return NULL;
192 }
193 
194 struct iscsi_seq *iscsit_get_seq_holder_for_r2t(struct iscsi_cmd *cmd)
195 {
196 	u32 i;
197 
198 	if (!cmd->seq_list) {
199 		pr_err("struct iscsi_cmd->seq_list is NULL!\n");
200 		return NULL;
201 	}
202 
203 	for (i = 0; i < cmd->seq_count; i++) {
204 		if (cmd->seq_list[i].type != SEQTYPE_NORMAL)
205 			continue;
206 		if (cmd->seq_list[i].seq_send_order == cmd->seq_send_order) {
207 			cmd->seq_send_order++;
208 			return &cmd->seq_list[i];
209 		}
210 	}
211 
212 	return NULL;
213 }
214 
215 struct iscsi_r2t *iscsit_get_holder_for_r2tsn(
216 	struct iscsi_cmd *cmd,
217 	u32 r2t_sn)
218 {
219 	struct iscsi_r2t *r2t;
220 
221 	spin_lock_bh(&cmd->r2t_lock);
222 	list_for_each_entry(r2t, &cmd->cmd_r2t_list, r2t_list) {
223 		if (r2t->r2t_sn == r2t_sn) {
224 			spin_unlock_bh(&cmd->r2t_lock);
225 			return r2t;
226 		}
227 	}
228 	spin_unlock_bh(&cmd->r2t_lock);
229 
230 	return NULL;
231 }
232 
233 static inline int iscsit_check_received_cmdsn(struct iscsi_session *sess, u32 cmdsn)
234 {
235 	int ret;
236 
237 	/*
238 	 * This is the proper method of checking received CmdSN against
239 	 * ExpCmdSN and MaxCmdSN values, as well as accounting for out
240 	 * or order CmdSNs due to multiple connection sessions and/or
241 	 * CRC failures.
242 	 */
243 	if (iscsi_sna_gt(cmdsn, sess->max_cmd_sn)) {
244 		pr_err("Received CmdSN: 0x%08x is greater than"
245 		       " MaxCmdSN: 0x%08x, protocol error.\n", cmdsn,
246 		       sess->max_cmd_sn);
247 		ret = CMDSN_ERROR_CANNOT_RECOVER;
248 
249 	} else if (cmdsn == sess->exp_cmd_sn) {
250 		sess->exp_cmd_sn++;
251 		pr_debug("Received CmdSN matches ExpCmdSN,"
252 		      " incremented ExpCmdSN to: 0x%08x\n",
253 		      sess->exp_cmd_sn);
254 		ret = CMDSN_NORMAL_OPERATION;
255 
256 	} else if (iscsi_sna_gt(cmdsn, sess->exp_cmd_sn)) {
257 		pr_debug("Received CmdSN: 0x%08x is greater"
258 		      " than ExpCmdSN: 0x%08x, not acknowledging.\n",
259 		      cmdsn, sess->exp_cmd_sn);
260 		ret = CMDSN_HIGHER_THAN_EXP;
261 
262 	} else {
263 		pr_err("Received CmdSN: 0x%08x is less than"
264 		       " ExpCmdSN: 0x%08x, ignoring.\n", cmdsn,
265 		       sess->exp_cmd_sn);
266 		ret = CMDSN_LOWER_THAN_EXP;
267 	}
268 
269 	return ret;
270 }
271 
272 /*
273  * Commands may be received out of order if MC/S is in use.
274  * Ensure they are executed in CmdSN order.
275  */
276 int iscsit_sequence_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
277 			unsigned char *buf, __be32 cmdsn)
278 {
279 	int ret, cmdsn_ret;
280 	bool reject = false;
281 	u8 reason = ISCSI_REASON_BOOKMARK_NO_RESOURCES;
282 
283 	mutex_lock(&conn->sess->cmdsn_mutex);
284 
285 	cmdsn_ret = iscsit_check_received_cmdsn(conn->sess, be32_to_cpu(cmdsn));
286 	switch (cmdsn_ret) {
287 	case CMDSN_NORMAL_OPERATION:
288 		ret = iscsit_execute_cmd(cmd, 0);
289 		if ((ret >= 0) && !list_empty(&conn->sess->sess_ooo_cmdsn_list))
290 			iscsit_execute_ooo_cmdsns(conn->sess);
291 		else if (ret < 0) {
292 			reject = true;
293 			ret = CMDSN_ERROR_CANNOT_RECOVER;
294 		}
295 		break;
296 	case CMDSN_HIGHER_THAN_EXP:
297 		ret = iscsit_handle_ooo_cmdsn(conn->sess, cmd, be32_to_cpu(cmdsn));
298 		if (ret < 0) {
299 			reject = true;
300 			ret = CMDSN_ERROR_CANNOT_RECOVER;
301 			break;
302 		}
303 		ret = CMDSN_HIGHER_THAN_EXP;
304 		break;
305 	case CMDSN_LOWER_THAN_EXP:
306 		cmd->i_state = ISTATE_REMOVE;
307 		iscsit_add_cmd_to_immediate_queue(cmd, conn, cmd->i_state);
308 		ret = cmdsn_ret;
309 		break;
310 	default:
311 		reason = ISCSI_REASON_PROTOCOL_ERROR;
312 		reject = true;
313 		ret = cmdsn_ret;
314 		break;
315 	}
316 	mutex_unlock(&conn->sess->cmdsn_mutex);
317 
318 	if (reject)
319 		iscsit_reject_cmd(cmd, reason, buf);
320 
321 	return ret;
322 }
323 EXPORT_SYMBOL(iscsit_sequence_cmd);
324 
325 int iscsit_check_unsolicited_dataout(struct iscsi_cmd *cmd, unsigned char *buf)
326 {
327 	struct iscsi_conn *conn = cmd->conn;
328 	struct se_cmd *se_cmd = &cmd->se_cmd;
329 	struct iscsi_data *hdr = (struct iscsi_data *) buf;
330 	u32 payload_length = ntoh24(hdr->dlength);
331 
332 	if (conn->sess->sess_ops->InitialR2T) {
333 		pr_err("Received unexpected unsolicited data"
334 			" while InitialR2T=Yes, protocol error.\n");
335 		transport_send_check_condition_and_sense(se_cmd,
336 				TCM_UNEXPECTED_UNSOLICITED_DATA, 0);
337 		return -1;
338 	}
339 
340 	if ((cmd->first_burst_len + payload_length) >
341 	     conn->sess->sess_ops->FirstBurstLength) {
342 		pr_err("Total %u bytes exceeds FirstBurstLength: %u"
343 			" for this Unsolicited DataOut Burst.\n",
344 			(cmd->first_burst_len + payload_length),
345 				conn->sess->sess_ops->FirstBurstLength);
346 		transport_send_check_condition_and_sense(se_cmd,
347 				TCM_INCORRECT_AMOUNT_OF_DATA, 0);
348 		return -1;
349 	}
350 
351 	if (!(hdr->flags & ISCSI_FLAG_CMD_FINAL))
352 		return 0;
353 
354 	if (((cmd->first_burst_len + payload_length) != cmd->se_cmd.data_length) &&
355 	    ((cmd->first_burst_len + payload_length) !=
356 	      conn->sess->sess_ops->FirstBurstLength)) {
357 		pr_err("Unsolicited non-immediate data received %u"
358 			" does not equal FirstBurstLength: %u, and does"
359 			" not equal ExpXferLen %u.\n",
360 			(cmd->first_burst_len + payload_length),
361 			conn->sess->sess_ops->FirstBurstLength, cmd->se_cmd.data_length);
362 		transport_send_check_condition_and_sense(se_cmd,
363 				TCM_INCORRECT_AMOUNT_OF_DATA, 0);
364 		return -1;
365 	}
366 	return 0;
367 }
368 
369 struct iscsi_cmd *iscsit_find_cmd_from_itt(
370 	struct iscsi_conn *conn,
371 	itt_t init_task_tag)
372 {
373 	struct iscsi_cmd *cmd;
374 
375 	spin_lock_bh(&conn->cmd_lock);
376 	list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
377 		if (cmd->init_task_tag == init_task_tag) {
378 			spin_unlock_bh(&conn->cmd_lock);
379 			return cmd;
380 		}
381 	}
382 	spin_unlock_bh(&conn->cmd_lock);
383 
384 	pr_err("Unable to locate ITT: 0x%08x on CID: %hu",
385 			init_task_tag, conn->cid);
386 	return NULL;
387 }
388 
389 struct iscsi_cmd *iscsit_find_cmd_from_itt_or_dump(
390 	struct iscsi_conn *conn,
391 	itt_t init_task_tag,
392 	u32 length)
393 {
394 	struct iscsi_cmd *cmd;
395 
396 	spin_lock_bh(&conn->cmd_lock);
397 	list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
398 		if (cmd->init_task_tag == init_task_tag) {
399 			spin_unlock_bh(&conn->cmd_lock);
400 			return cmd;
401 		}
402 	}
403 	spin_unlock_bh(&conn->cmd_lock);
404 
405 	pr_err("Unable to locate ITT: 0x%08x on CID: %hu,"
406 			" dumping payload\n", init_task_tag, conn->cid);
407 	if (length)
408 		iscsit_dump_data_payload(conn, length, 1);
409 
410 	return NULL;
411 }
412 
413 struct iscsi_cmd *iscsit_find_cmd_from_ttt(
414 	struct iscsi_conn *conn,
415 	u32 targ_xfer_tag)
416 {
417 	struct iscsi_cmd *cmd = NULL;
418 
419 	spin_lock_bh(&conn->cmd_lock);
420 	list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
421 		if (cmd->targ_xfer_tag == targ_xfer_tag) {
422 			spin_unlock_bh(&conn->cmd_lock);
423 			return cmd;
424 		}
425 	}
426 	spin_unlock_bh(&conn->cmd_lock);
427 
428 	pr_err("Unable to locate TTT: 0x%08x on CID: %hu\n",
429 			targ_xfer_tag, conn->cid);
430 	return NULL;
431 }
432 
433 int iscsit_find_cmd_for_recovery(
434 	struct iscsi_session *sess,
435 	struct iscsi_cmd **cmd_ptr,
436 	struct iscsi_conn_recovery **cr_ptr,
437 	itt_t init_task_tag)
438 {
439 	struct iscsi_cmd *cmd = NULL;
440 	struct iscsi_conn_recovery *cr;
441 	/*
442 	 * Scan through the inactive connection recovery list's command list.
443 	 * If init_task_tag matches the command is still alligent.
444 	 */
445 	spin_lock(&sess->cr_i_lock);
446 	list_for_each_entry(cr, &sess->cr_inactive_list, cr_list) {
447 		spin_lock(&cr->conn_recovery_cmd_lock);
448 		list_for_each_entry(cmd, &cr->conn_recovery_cmd_list, i_conn_node) {
449 			if (cmd->init_task_tag == init_task_tag) {
450 				spin_unlock(&cr->conn_recovery_cmd_lock);
451 				spin_unlock(&sess->cr_i_lock);
452 
453 				*cr_ptr = cr;
454 				*cmd_ptr = cmd;
455 				return -2;
456 			}
457 		}
458 		spin_unlock(&cr->conn_recovery_cmd_lock);
459 	}
460 	spin_unlock(&sess->cr_i_lock);
461 	/*
462 	 * Scan through the active connection recovery list's command list.
463 	 * If init_task_tag matches the command is ready to be reassigned.
464 	 */
465 	spin_lock(&sess->cr_a_lock);
466 	list_for_each_entry(cr, &sess->cr_active_list, cr_list) {
467 		spin_lock(&cr->conn_recovery_cmd_lock);
468 		list_for_each_entry(cmd, &cr->conn_recovery_cmd_list, i_conn_node) {
469 			if (cmd->init_task_tag == init_task_tag) {
470 				spin_unlock(&cr->conn_recovery_cmd_lock);
471 				spin_unlock(&sess->cr_a_lock);
472 
473 				*cr_ptr = cr;
474 				*cmd_ptr = cmd;
475 				return 0;
476 			}
477 		}
478 		spin_unlock(&cr->conn_recovery_cmd_lock);
479 	}
480 	spin_unlock(&sess->cr_a_lock);
481 
482 	return -1;
483 }
484 
485 void iscsit_add_cmd_to_immediate_queue(
486 	struct iscsi_cmd *cmd,
487 	struct iscsi_conn *conn,
488 	u8 state)
489 {
490 	struct iscsi_queue_req *qr;
491 
492 	qr = kmem_cache_zalloc(lio_qr_cache, GFP_ATOMIC);
493 	if (!qr) {
494 		pr_err("Unable to allocate memory for"
495 				" struct iscsi_queue_req\n");
496 		return;
497 	}
498 	INIT_LIST_HEAD(&qr->qr_list);
499 	qr->cmd = cmd;
500 	qr->state = state;
501 
502 	spin_lock_bh(&conn->immed_queue_lock);
503 	list_add_tail(&qr->qr_list, &conn->immed_queue_list);
504 	atomic_inc(&cmd->immed_queue_count);
505 	atomic_set(&conn->check_immediate_queue, 1);
506 	spin_unlock_bh(&conn->immed_queue_lock);
507 
508 	wake_up(&conn->queues_wq);
509 }
510 
511 struct iscsi_queue_req *iscsit_get_cmd_from_immediate_queue(struct iscsi_conn *conn)
512 {
513 	struct iscsi_queue_req *qr;
514 
515 	spin_lock_bh(&conn->immed_queue_lock);
516 	if (list_empty(&conn->immed_queue_list)) {
517 		spin_unlock_bh(&conn->immed_queue_lock);
518 		return NULL;
519 	}
520 	qr = list_first_entry(&conn->immed_queue_list,
521 			      struct iscsi_queue_req, qr_list);
522 
523 	list_del(&qr->qr_list);
524 	if (qr->cmd)
525 		atomic_dec(&qr->cmd->immed_queue_count);
526 	spin_unlock_bh(&conn->immed_queue_lock);
527 
528 	return qr;
529 }
530 
531 static void iscsit_remove_cmd_from_immediate_queue(
532 	struct iscsi_cmd *cmd,
533 	struct iscsi_conn *conn)
534 {
535 	struct iscsi_queue_req *qr, *qr_tmp;
536 
537 	spin_lock_bh(&conn->immed_queue_lock);
538 	if (!atomic_read(&cmd->immed_queue_count)) {
539 		spin_unlock_bh(&conn->immed_queue_lock);
540 		return;
541 	}
542 
543 	list_for_each_entry_safe(qr, qr_tmp, &conn->immed_queue_list, qr_list) {
544 		if (qr->cmd != cmd)
545 			continue;
546 
547 		atomic_dec(&qr->cmd->immed_queue_count);
548 		list_del(&qr->qr_list);
549 		kmem_cache_free(lio_qr_cache, qr);
550 	}
551 	spin_unlock_bh(&conn->immed_queue_lock);
552 
553 	if (atomic_read(&cmd->immed_queue_count)) {
554 		pr_err("ITT: 0x%08x immed_queue_count: %d\n",
555 			cmd->init_task_tag,
556 			atomic_read(&cmd->immed_queue_count));
557 	}
558 }
559 
560 void iscsit_add_cmd_to_response_queue(
561 	struct iscsi_cmd *cmd,
562 	struct iscsi_conn *conn,
563 	u8 state)
564 {
565 	struct iscsi_queue_req *qr;
566 
567 	qr = kmem_cache_zalloc(lio_qr_cache, GFP_ATOMIC);
568 	if (!qr) {
569 		pr_err("Unable to allocate memory for"
570 			" struct iscsi_queue_req\n");
571 		return;
572 	}
573 	INIT_LIST_HEAD(&qr->qr_list);
574 	qr->cmd = cmd;
575 	qr->state = state;
576 
577 	spin_lock_bh(&conn->response_queue_lock);
578 	list_add_tail(&qr->qr_list, &conn->response_queue_list);
579 	atomic_inc(&cmd->response_queue_count);
580 	spin_unlock_bh(&conn->response_queue_lock);
581 
582 	wake_up(&conn->queues_wq);
583 }
584 
585 struct iscsi_queue_req *iscsit_get_cmd_from_response_queue(struct iscsi_conn *conn)
586 {
587 	struct iscsi_queue_req *qr;
588 
589 	spin_lock_bh(&conn->response_queue_lock);
590 	if (list_empty(&conn->response_queue_list)) {
591 		spin_unlock_bh(&conn->response_queue_lock);
592 		return NULL;
593 	}
594 
595 	qr = list_first_entry(&conn->response_queue_list,
596 			      struct iscsi_queue_req, qr_list);
597 
598 	list_del(&qr->qr_list);
599 	if (qr->cmd)
600 		atomic_dec(&qr->cmd->response_queue_count);
601 	spin_unlock_bh(&conn->response_queue_lock);
602 
603 	return qr;
604 }
605 
606 static void iscsit_remove_cmd_from_response_queue(
607 	struct iscsi_cmd *cmd,
608 	struct iscsi_conn *conn)
609 {
610 	struct iscsi_queue_req *qr, *qr_tmp;
611 
612 	spin_lock_bh(&conn->response_queue_lock);
613 	if (!atomic_read(&cmd->response_queue_count)) {
614 		spin_unlock_bh(&conn->response_queue_lock);
615 		return;
616 	}
617 
618 	list_for_each_entry_safe(qr, qr_tmp, &conn->response_queue_list,
619 				qr_list) {
620 		if (qr->cmd != cmd)
621 			continue;
622 
623 		atomic_dec(&qr->cmd->response_queue_count);
624 		list_del(&qr->qr_list);
625 		kmem_cache_free(lio_qr_cache, qr);
626 	}
627 	spin_unlock_bh(&conn->response_queue_lock);
628 
629 	if (atomic_read(&cmd->response_queue_count)) {
630 		pr_err("ITT: 0x%08x response_queue_count: %d\n",
631 			cmd->init_task_tag,
632 			atomic_read(&cmd->response_queue_count));
633 	}
634 }
635 
636 bool iscsit_conn_all_queues_empty(struct iscsi_conn *conn)
637 {
638 	bool empty;
639 
640 	spin_lock_bh(&conn->immed_queue_lock);
641 	empty = list_empty(&conn->immed_queue_list);
642 	spin_unlock_bh(&conn->immed_queue_lock);
643 
644 	if (!empty)
645 		return empty;
646 
647 	spin_lock_bh(&conn->response_queue_lock);
648 	empty = list_empty(&conn->response_queue_list);
649 	spin_unlock_bh(&conn->response_queue_lock);
650 
651 	return empty;
652 }
653 
654 void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *conn)
655 {
656 	struct iscsi_queue_req *qr, *qr_tmp;
657 
658 	spin_lock_bh(&conn->immed_queue_lock);
659 	list_for_each_entry_safe(qr, qr_tmp, &conn->immed_queue_list, qr_list) {
660 		list_del(&qr->qr_list);
661 		if (qr->cmd)
662 			atomic_dec(&qr->cmd->immed_queue_count);
663 
664 		kmem_cache_free(lio_qr_cache, qr);
665 	}
666 	spin_unlock_bh(&conn->immed_queue_lock);
667 
668 	spin_lock_bh(&conn->response_queue_lock);
669 	list_for_each_entry_safe(qr, qr_tmp, &conn->response_queue_list,
670 			qr_list) {
671 		list_del(&qr->qr_list);
672 		if (qr->cmd)
673 			atomic_dec(&qr->cmd->response_queue_count);
674 
675 		kmem_cache_free(lio_qr_cache, qr);
676 	}
677 	spin_unlock_bh(&conn->response_queue_lock);
678 }
679 
680 void iscsit_release_cmd(struct iscsi_cmd *cmd)
681 {
682 	struct iscsi_session *sess;
683 	struct se_cmd *se_cmd = &cmd->se_cmd;
684 
685 	if (cmd->conn)
686 		sess = cmd->conn->sess;
687 	else
688 		sess = cmd->sess;
689 
690 	BUG_ON(!sess || !sess->se_sess);
691 
692 	kfree(cmd->buf_ptr);
693 	kfree(cmd->pdu_list);
694 	kfree(cmd->seq_list);
695 	kfree(cmd->tmr_req);
696 	kfree(cmd->iov_data);
697 	kfree(cmd->text_in_ptr);
698 
699 	percpu_ida_free(&sess->se_sess->sess_tag_pool, se_cmd->map_tag);
700 }
701 EXPORT_SYMBOL(iscsit_release_cmd);
702 
703 static void __iscsit_free_cmd(struct iscsi_cmd *cmd, bool scsi_cmd,
704 			      bool check_queues)
705 {
706 	struct iscsi_conn *conn = cmd->conn;
707 
708 	if (scsi_cmd) {
709 		if (cmd->data_direction == DMA_TO_DEVICE) {
710 			iscsit_stop_dataout_timer(cmd);
711 			iscsit_free_r2ts_from_list(cmd);
712 		}
713 		if (cmd->data_direction == DMA_FROM_DEVICE)
714 			iscsit_free_all_datain_reqs(cmd);
715 	}
716 
717 	if (conn && check_queues) {
718 		iscsit_remove_cmd_from_immediate_queue(cmd, conn);
719 		iscsit_remove_cmd_from_response_queue(cmd, conn);
720 	}
721 }
722 
723 void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown)
724 {
725 	struct se_cmd *se_cmd = NULL;
726 	int rc;
727 	/*
728 	 * Determine if a struct se_cmd is associated with
729 	 * this struct iscsi_cmd.
730 	 */
731 	switch (cmd->iscsi_opcode) {
732 	case ISCSI_OP_SCSI_CMD:
733 		se_cmd = &cmd->se_cmd;
734 		__iscsit_free_cmd(cmd, true, shutdown);
735 		/*
736 		 * Fallthrough
737 		 */
738 	case ISCSI_OP_SCSI_TMFUNC:
739 		rc = transport_generic_free_cmd(&cmd->se_cmd, shutdown);
740 		if (!rc && shutdown && se_cmd && se_cmd->se_sess) {
741 			__iscsit_free_cmd(cmd, true, shutdown);
742 			target_put_sess_cmd(se_cmd->se_sess, se_cmd);
743 		}
744 		break;
745 	case ISCSI_OP_REJECT:
746 		/*
747 		 * Handle special case for REJECT when iscsi_add_reject*() has
748 		 * overwritten the original iscsi_opcode assignment, and the
749 		 * associated cmd->se_cmd needs to be released.
750 		 */
751 		if (cmd->se_cmd.se_tfo != NULL) {
752 			se_cmd = &cmd->se_cmd;
753 			__iscsit_free_cmd(cmd, true, shutdown);
754 
755 			rc = transport_generic_free_cmd(&cmd->se_cmd, shutdown);
756 			if (!rc && shutdown && se_cmd->se_sess) {
757 				__iscsit_free_cmd(cmd, true, shutdown);
758 				target_put_sess_cmd(se_cmd->se_sess, se_cmd);
759 			}
760 			break;
761 		}
762 		/* Fall-through */
763 	default:
764 		__iscsit_free_cmd(cmd, false, shutdown);
765 		iscsit_release_cmd(cmd);
766 		break;
767 	}
768 }
769 
770 int iscsit_check_session_usage_count(struct iscsi_session *sess)
771 {
772 	spin_lock_bh(&sess->session_usage_lock);
773 	if (sess->session_usage_count != 0) {
774 		sess->session_waiting_on_uc = 1;
775 		spin_unlock_bh(&sess->session_usage_lock);
776 		if (in_interrupt())
777 			return 2;
778 
779 		wait_for_completion(&sess->session_waiting_on_uc_comp);
780 		return 1;
781 	}
782 	spin_unlock_bh(&sess->session_usage_lock);
783 
784 	return 0;
785 }
786 
787 void iscsit_dec_session_usage_count(struct iscsi_session *sess)
788 {
789 	spin_lock_bh(&sess->session_usage_lock);
790 	sess->session_usage_count--;
791 
792 	if (!sess->session_usage_count && sess->session_waiting_on_uc)
793 		complete(&sess->session_waiting_on_uc_comp);
794 
795 	spin_unlock_bh(&sess->session_usage_lock);
796 }
797 
798 void iscsit_inc_session_usage_count(struct iscsi_session *sess)
799 {
800 	spin_lock_bh(&sess->session_usage_lock);
801 	sess->session_usage_count++;
802 	spin_unlock_bh(&sess->session_usage_lock);
803 }
804 
805 /*
806  *	Setup conn->if_marker and conn->of_marker values based upon
807  *	the initial marker-less interval. (see iSCSI v19 A.2)
808  */
809 int iscsit_set_sync_and_steering_values(struct iscsi_conn *conn)
810 {
811 	int login_ifmarker_count = 0, login_ofmarker_count = 0, next_marker = 0;
812 	/*
813 	 * IFMarkInt and OFMarkInt are negotiated as 32-bit words.
814 	 */
815 	u32 IFMarkInt = (conn->conn_ops->IFMarkInt * 4);
816 	u32 OFMarkInt = (conn->conn_ops->OFMarkInt * 4);
817 
818 	if (conn->conn_ops->OFMarker) {
819 		/*
820 		 * Account for the first Login Command received not
821 		 * via iscsi_recv_msg().
822 		 */
823 		conn->of_marker += ISCSI_HDR_LEN;
824 		if (conn->of_marker <= OFMarkInt) {
825 			conn->of_marker = (OFMarkInt - conn->of_marker);
826 		} else {
827 			login_ofmarker_count = (conn->of_marker / OFMarkInt);
828 			next_marker = (OFMarkInt * (login_ofmarker_count + 1)) +
829 					(login_ofmarker_count * MARKER_SIZE);
830 			conn->of_marker = (next_marker - conn->of_marker);
831 		}
832 		conn->of_marker_offset = 0;
833 		pr_debug("Setting OFMarker value to %u based on Initial"
834 			" Markerless Interval.\n", conn->of_marker);
835 	}
836 
837 	if (conn->conn_ops->IFMarker) {
838 		if (conn->if_marker <= IFMarkInt) {
839 			conn->if_marker = (IFMarkInt - conn->if_marker);
840 		} else {
841 			login_ifmarker_count = (conn->if_marker / IFMarkInt);
842 			next_marker = (IFMarkInt * (login_ifmarker_count + 1)) +
843 					(login_ifmarker_count * MARKER_SIZE);
844 			conn->if_marker = (next_marker - conn->if_marker);
845 		}
846 		pr_debug("Setting IFMarker value to %u based on Initial"
847 			" Markerless Interval.\n", conn->if_marker);
848 	}
849 
850 	return 0;
851 }
852 
853 struct iscsi_conn *iscsit_get_conn_from_cid(struct iscsi_session *sess, u16 cid)
854 {
855 	struct iscsi_conn *conn;
856 
857 	spin_lock_bh(&sess->conn_lock);
858 	list_for_each_entry(conn, &sess->sess_conn_list, conn_list) {
859 		if ((conn->cid == cid) &&
860 		    (conn->conn_state == TARG_CONN_STATE_LOGGED_IN)) {
861 			iscsit_inc_conn_usage_count(conn);
862 			spin_unlock_bh(&sess->conn_lock);
863 			return conn;
864 		}
865 	}
866 	spin_unlock_bh(&sess->conn_lock);
867 
868 	return NULL;
869 }
870 
871 struct iscsi_conn *iscsit_get_conn_from_cid_rcfr(struct iscsi_session *sess, u16 cid)
872 {
873 	struct iscsi_conn *conn;
874 
875 	spin_lock_bh(&sess->conn_lock);
876 	list_for_each_entry(conn, &sess->sess_conn_list, conn_list) {
877 		if (conn->cid == cid) {
878 			iscsit_inc_conn_usage_count(conn);
879 			spin_lock(&conn->state_lock);
880 			atomic_set(&conn->connection_wait_rcfr, 1);
881 			spin_unlock(&conn->state_lock);
882 			spin_unlock_bh(&sess->conn_lock);
883 			return conn;
884 		}
885 	}
886 	spin_unlock_bh(&sess->conn_lock);
887 
888 	return NULL;
889 }
890 
891 void iscsit_check_conn_usage_count(struct iscsi_conn *conn)
892 {
893 	spin_lock_bh(&conn->conn_usage_lock);
894 	if (conn->conn_usage_count != 0) {
895 		conn->conn_waiting_on_uc = 1;
896 		spin_unlock_bh(&conn->conn_usage_lock);
897 
898 		wait_for_completion(&conn->conn_waiting_on_uc_comp);
899 		return;
900 	}
901 	spin_unlock_bh(&conn->conn_usage_lock);
902 }
903 
904 void iscsit_dec_conn_usage_count(struct iscsi_conn *conn)
905 {
906 	spin_lock_bh(&conn->conn_usage_lock);
907 	conn->conn_usage_count--;
908 
909 	if (!conn->conn_usage_count && conn->conn_waiting_on_uc)
910 		complete(&conn->conn_waiting_on_uc_comp);
911 
912 	spin_unlock_bh(&conn->conn_usage_lock);
913 }
914 
915 void iscsit_inc_conn_usage_count(struct iscsi_conn *conn)
916 {
917 	spin_lock_bh(&conn->conn_usage_lock);
918 	conn->conn_usage_count++;
919 	spin_unlock_bh(&conn->conn_usage_lock);
920 }
921 
922 static int iscsit_add_nopin(struct iscsi_conn *conn, int want_response)
923 {
924 	u8 state;
925 	struct iscsi_cmd *cmd;
926 
927 	cmd = iscsit_allocate_cmd(conn, GFP_ATOMIC);
928 	if (!cmd)
929 		return -1;
930 
931 	cmd->iscsi_opcode = ISCSI_OP_NOOP_IN;
932 	state = (want_response) ? ISTATE_SEND_NOPIN_WANT_RESPONSE :
933 				ISTATE_SEND_NOPIN_NO_RESPONSE;
934 	cmd->init_task_tag = RESERVED_ITT;
935 	spin_lock_bh(&conn->sess->ttt_lock);
936 	cmd->targ_xfer_tag = (want_response) ? conn->sess->targ_xfer_tag++ :
937 			0xFFFFFFFF;
938 	if (want_response && (cmd->targ_xfer_tag == 0xFFFFFFFF))
939 		cmd->targ_xfer_tag = conn->sess->targ_xfer_tag++;
940 	spin_unlock_bh(&conn->sess->ttt_lock);
941 
942 	spin_lock_bh(&conn->cmd_lock);
943 	list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list);
944 	spin_unlock_bh(&conn->cmd_lock);
945 
946 	if (want_response)
947 		iscsit_start_nopin_response_timer(conn);
948 	iscsit_add_cmd_to_immediate_queue(cmd, conn, state);
949 
950 	return 0;
951 }
952 
953 static void iscsit_handle_nopin_response_timeout(unsigned long data)
954 {
955 	struct iscsi_conn *conn = (struct iscsi_conn *) data;
956 
957 	iscsit_inc_conn_usage_count(conn);
958 
959 	spin_lock_bh(&conn->nopin_timer_lock);
960 	if (conn->nopin_response_timer_flags & ISCSI_TF_STOP) {
961 		spin_unlock_bh(&conn->nopin_timer_lock);
962 		iscsit_dec_conn_usage_count(conn);
963 		return;
964 	}
965 
966 	pr_debug("Did not receive response to NOPIN on CID: %hu on"
967 		" SID: %u, failing connection.\n", conn->cid,
968 			conn->sess->sid);
969 	conn->nopin_response_timer_flags &= ~ISCSI_TF_RUNNING;
970 	spin_unlock_bh(&conn->nopin_timer_lock);
971 
972 	{
973 	struct iscsi_portal_group *tpg = conn->sess->tpg;
974 	struct iscsi_tiqn *tiqn = tpg->tpg_tiqn;
975 
976 	if (tiqn) {
977 		spin_lock_bh(&tiqn->sess_err_stats.lock);
978 		strcpy(tiqn->sess_err_stats.last_sess_fail_rem_name,
979 				conn->sess->sess_ops->InitiatorName);
980 		tiqn->sess_err_stats.last_sess_failure_type =
981 				ISCSI_SESS_ERR_CXN_TIMEOUT;
982 		tiqn->sess_err_stats.cxn_timeout_errors++;
983 		conn->sess->conn_timeout_errors++;
984 		spin_unlock_bh(&tiqn->sess_err_stats.lock);
985 	}
986 	}
987 
988 	iscsit_cause_connection_reinstatement(conn, 0);
989 	iscsit_dec_conn_usage_count(conn);
990 }
991 
992 void iscsit_mod_nopin_response_timer(struct iscsi_conn *conn)
993 {
994 	struct iscsi_session *sess = conn->sess;
995 	struct iscsi_node_attrib *na = iscsit_tpg_get_node_attrib(sess);
996 
997 	spin_lock_bh(&conn->nopin_timer_lock);
998 	if (!(conn->nopin_response_timer_flags & ISCSI_TF_RUNNING)) {
999 		spin_unlock_bh(&conn->nopin_timer_lock);
1000 		return;
1001 	}
1002 
1003 	mod_timer(&conn->nopin_response_timer,
1004 		(get_jiffies_64() + na->nopin_response_timeout * HZ));
1005 	spin_unlock_bh(&conn->nopin_timer_lock);
1006 }
1007 
1008 /*
1009  *	Called with conn->nopin_timer_lock held.
1010  */
1011 void iscsit_start_nopin_response_timer(struct iscsi_conn *conn)
1012 {
1013 	struct iscsi_session *sess = conn->sess;
1014 	struct iscsi_node_attrib *na = iscsit_tpg_get_node_attrib(sess);
1015 
1016 	spin_lock_bh(&conn->nopin_timer_lock);
1017 	if (conn->nopin_response_timer_flags & ISCSI_TF_RUNNING) {
1018 		spin_unlock_bh(&conn->nopin_timer_lock);
1019 		return;
1020 	}
1021 
1022 	init_timer(&conn->nopin_response_timer);
1023 	conn->nopin_response_timer.expires =
1024 		(get_jiffies_64() + na->nopin_response_timeout * HZ);
1025 	conn->nopin_response_timer.data = (unsigned long)conn;
1026 	conn->nopin_response_timer.function = iscsit_handle_nopin_response_timeout;
1027 	conn->nopin_response_timer_flags &= ~ISCSI_TF_STOP;
1028 	conn->nopin_response_timer_flags |= ISCSI_TF_RUNNING;
1029 	add_timer(&conn->nopin_response_timer);
1030 
1031 	pr_debug("Started NOPIN Response Timer on CID: %d to %u"
1032 		" seconds\n", conn->cid, na->nopin_response_timeout);
1033 	spin_unlock_bh(&conn->nopin_timer_lock);
1034 }
1035 
1036 void iscsit_stop_nopin_response_timer(struct iscsi_conn *conn)
1037 {
1038 	spin_lock_bh(&conn->nopin_timer_lock);
1039 	if (!(conn->nopin_response_timer_flags & ISCSI_TF_RUNNING)) {
1040 		spin_unlock_bh(&conn->nopin_timer_lock);
1041 		return;
1042 	}
1043 	conn->nopin_response_timer_flags |= ISCSI_TF_STOP;
1044 	spin_unlock_bh(&conn->nopin_timer_lock);
1045 
1046 	del_timer_sync(&conn->nopin_response_timer);
1047 
1048 	spin_lock_bh(&conn->nopin_timer_lock);
1049 	conn->nopin_response_timer_flags &= ~ISCSI_TF_RUNNING;
1050 	spin_unlock_bh(&conn->nopin_timer_lock);
1051 }
1052 
1053 static void iscsit_handle_nopin_timeout(unsigned long data)
1054 {
1055 	struct iscsi_conn *conn = (struct iscsi_conn *) data;
1056 
1057 	iscsit_inc_conn_usage_count(conn);
1058 
1059 	spin_lock_bh(&conn->nopin_timer_lock);
1060 	if (conn->nopin_timer_flags & ISCSI_TF_STOP) {
1061 		spin_unlock_bh(&conn->nopin_timer_lock);
1062 		iscsit_dec_conn_usage_count(conn);
1063 		return;
1064 	}
1065 	conn->nopin_timer_flags &= ~ISCSI_TF_RUNNING;
1066 	spin_unlock_bh(&conn->nopin_timer_lock);
1067 
1068 	iscsit_add_nopin(conn, 1);
1069 	iscsit_dec_conn_usage_count(conn);
1070 }
1071 
1072 /*
1073  * Called with conn->nopin_timer_lock held.
1074  */
1075 void __iscsit_start_nopin_timer(struct iscsi_conn *conn)
1076 {
1077 	struct iscsi_session *sess = conn->sess;
1078 	struct iscsi_node_attrib *na = iscsit_tpg_get_node_attrib(sess);
1079 	/*
1080 	* NOPIN timeout is disabled.
1081 	 */
1082 	if (!na->nopin_timeout)
1083 		return;
1084 
1085 	if (conn->nopin_timer_flags & ISCSI_TF_RUNNING)
1086 		return;
1087 
1088 	init_timer(&conn->nopin_timer);
1089 	conn->nopin_timer.expires = (get_jiffies_64() + na->nopin_timeout * HZ);
1090 	conn->nopin_timer.data = (unsigned long)conn;
1091 	conn->nopin_timer.function = iscsit_handle_nopin_timeout;
1092 	conn->nopin_timer_flags &= ~ISCSI_TF_STOP;
1093 	conn->nopin_timer_flags |= ISCSI_TF_RUNNING;
1094 	add_timer(&conn->nopin_timer);
1095 
1096 	pr_debug("Started NOPIN Timer on CID: %d at %u second"
1097 		" interval\n", conn->cid, na->nopin_timeout);
1098 }
1099 
1100 void iscsit_start_nopin_timer(struct iscsi_conn *conn)
1101 {
1102 	struct iscsi_session *sess = conn->sess;
1103 	struct iscsi_node_attrib *na = iscsit_tpg_get_node_attrib(sess);
1104 	/*
1105 	 * NOPIN timeout is disabled..
1106 	 */
1107 	if (!na->nopin_timeout)
1108 		return;
1109 
1110 	spin_lock_bh(&conn->nopin_timer_lock);
1111 	if (conn->nopin_timer_flags & ISCSI_TF_RUNNING) {
1112 		spin_unlock_bh(&conn->nopin_timer_lock);
1113 		return;
1114 	}
1115 
1116 	init_timer(&conn->nopin_timer);
1117 	conn->nopin_timer.expires = (get_jiffies_64() + na->nopin_timeout * HZ);
1118 	conn->nopin_timer.data = (unsigned long)conn;
1119 	conn->nopin_timer.function = iscsit_handle_nopin_timeout;
1120 	conn->nopin_timer_flags &= ~ISCSI_TF_STOP;
1121 	conn->nopin_timer_flags |= ISCSI_TF_RUNNING;
1122 	add_timer(&conn->nopin_timer);
1123 
1124 	pr_debug("Started NOPIN Timer on CID: %d at %u second"
1125 			" interval\n", conn->cid, na->nopin_timeout);
1126 	spin_unlock_bh(&conn->nopin_timer_lock);
1127 }
1128 
1129 void iscsit_stop_nopin_timer(struct iscsi_conn *conn)
1130 {
1131 	spin_lock_bh(&conn->nopin_timer_lock);
1132 	if (!(conn->nopin_timer_flags & ISCSI_TF_RUNNING)) {
1133 		spin_unlock_bh(&conn->nopin_timer_lock);
1134 		return;
1135 	}
1136 	conn->nopin_timer_flags |= ISCSI_TF_STOP;
1137 	spin_unlock_bh(&conn->nopin_timer_lock);
1138 
1139 	del_timer_sync(&conn->nopin_timer);
1140 
1141 	spin_lock_bh(&conn->nopin_timer_lock);
1142 	conn->nopin_timer_flags &= ~ISCSI_TF_RUNNING;
1143 	spin_unlock_bh(&conn->nopin_timer_lock);
1144 }
1145 
1146 int iscsit_send_tx_data(
1147 	struct iscsi_cmd *cmd,
1148 	struct iscsi_conn *conn,
1149 	int use_misc)
1150 {
1151 	int tx_sent, tx_size;
1152 	u32 iov_count;
1153 	struct kvec *iov;
1154 
1155 send_data:
1156 	tx_size = cmd->tx_size;
1157 
1158 	if (!use_misc) {
1159 		iov = &cmd->iov_data[0];
1160 		iov_count = cmd->iov_data_count;
1161 	} else {
1162 		iov = &cmd->iov_misc[0];
1163 		iov_count = cmd->iov_misc_count;
1164 	}
1165 
1166 	tx_sent = tx_data(conn, &iov[0], iov_count, tx_size);
1167 	if (tx_size != tx_sent) {
1168 		if (tx_sent == -EAGAIN) {
1169 			pr_err("tx_data() returned -EAGAIN\n");
1170 			goto send_data;
1171 		} else
1172 			return -1;
1173 	}
1174 	cmd->tx_size = 0;
1175 
1176 	return 0;
1177 }
1178 
1179 int iscsit_fe_sendpage_sg(
1180 	struct iscsi_cmd *cmd,
1181 	struct iscsi_conn *conn)
1182 {
1183 	struct scatterlist *sg = cmd->first_data_sg;
1184 	struct kvec iov;
1185 	u32 tx_hdr_size, data_len;
1186 	u32 offset = cmd->first_data_sg_off;
1187 	int tx_sent, iov_off;
1188 
1189 send_hdr:
1190 	tx_hdr_size = ISCSI_HDR_LEN;
1191 	if (conn->conn_ops->HeaderDigest)
1192 		tx_hdr_size += ISCSI_CRC_LEN;
1193 
1194 	iov.iov_base = cmd->pdu;
1195 	iov.iov_len = tx_hdr_size;
1196 
1197 	tx_sent = tx_data(conn, &iov, 1, tx_hdr_size);
1198 	if (tx_hdr_size != tx_sent) {
1199 		if (tx_sent == -EAGAIN) {
1200 			pr_err("tx_data() returned -EAGAIN\n");
1201 			goto send_hdr;
1202 		}
1203 		return -1;
1204 	}
1205 
1206 	data_len = cmd->tx_size - tx_hdr_size - cmd->padding;
1207 	/*
1208 	 * Set iov_off used by padding and data digest tx_data() calls below
1209 	 * in order to determine proper offset into cmd->iov_data[]
1210 	 */
1211 	if (conn->conn_ops->DataDigest) {
1212 		data_len -= ISCSI_CRC_LEN;
1213 		if (cmd->padding)
1214 			iov_off = (cmd->iov_data_count - 2);
1215 		else
1216 			iov_off = (cmd->iov_data_count - 1);
1217 	} else {
1218 		iov_off = (cmd->iov_data_count - 1);
1219 	}
1220 	/*
1221 	 * Perform sendpage() for each page in the scatterlist
1222 	 */
1223 	while (data_len) {
1224 		u32 space = (sg->length - offset);
1225 		u32 sub_len = min_t(u32, data_len, space);
1226 send_pg:
1227 		tx_sent = conn->sock->ops->sendpage(conn->sock,
1228 					sg_page(sg), sg->offset + offset, sub_len, 0);
1229 		if (tx_sent != sub_len) {
1230 			if (tx_sent == -EAGAIN) {
1231 				pr_err("tcp_sendpage() returned"
1232 						" -EAGAIN\n");
1233 				goto send_pg;
1234 			}
1235 
1236 			pr_err("tcp_sendpage() failure: %d\n",
1237 					tx_sent);
1238 			return -1;
1239 		}
1240 
1241 		data_len -= sub_len;
1242 		offset = 0;
1243 		sg = sg_next(sg);
1244 	}
1245 
1246 send_padding:
1247 	if (cmd->padding) {
1248 		struct kvec *iov_p = &cmd->iov_data[iov_off++];
1249 
1250 		tx_sent = tx_data(conn, iov_p, 1, cmd->padding);
1251 		if (cmd->padding != tx_sent) {
1252 			if (tx_sent == -EAGAIN) {
1253 				pr_err("tx_data() returned -EAGAIN\n");
1254 				goto send_padding;
1255 			}
1256 			return -1;
1257 		}
1258 	}
1259 
1260 send_datacrc:
1261 	if (conn->conn_ops->DataDigest) {
1262 		struct kvec *iov_d = &cmd->iov_data[iov_off];
1263 
1264 		tx_sent = tx_data(conn, iov_d, 1, ISCSI_CRC_LEN);
1265 		if (ISCSI_CRC_LEN != tx_sent) {
1266 			if (tx_sent == -EAGAIN) {
1267 				pr_err("tx_data() returned -EAGAIN\n");
1268 				goto send_datacrc;
1269 			}
1270 			return -1;
1271 		}
1272 	}
1273 
1274 	return 0;
1275 }
1276 
1277 /*
1278  *      This function is used for mainly sending a ISCSI_TARG_LOGIN_RSP PDU
1279  *      back to the Initiator when an expection condition occurs with the
1280  *      errors set in status_class and status_detail.
1281  *
1282  *      Parameters:     iSCSI Connection, Status Class, Status Detail.
1283  *      Returns:        0 on success, -1 on error.
1284  */
1285 int iscsit_tx_login_rsp(struct iscsi_conn *conn, u8 status_class, u8 status_detail)
1286 {
1287 	struct iscsi_login_rsp *hdr;
1288 	struct iscsi_login *login = conn->conn_login;
1289 
1290 	login->login_failed = 1;
1291 	iscsit_collect_login_stats(conn, status_class, status_detail);
1292 
1293 	hdr	= (struct iscsi_login_rsp *)&login->rsp[0];
1294 	hdr->opcode		= ISCSI_OP_LOGIN_RSP;
1295 	hdr->status_class	= status_class;
1296 	hdr->status_detail	= status_detail;
1297 	hdr->itt		= conn->login_itt;
1298 
1299 	return conn->conn_transport->iscsit_put_login_tx(conn, login, 0);
1300 }
1301 
1302 void iscsit_print_session_params(struct iscsi_session *sess)
1303 {
1304 	struct iscsi_conn *conn;
1305 
1306 	pr_debug("-----------------------------[Session Params for"
1307 		" SID: %u]-----------------------------\n", sess->sid);
1308 	spin_lock_bh(&sess->conn_lock);
1309 	list_for_each_entry(conn, &sess->sess_conn_list, conn_list)
1310 		iscsi_dump_conn_ops(conn->conn_ops);
1311 	spin_unlock_bh(&sess->conn_lock);
1312 
1313 	iscsi_dump_sess_ops(sess->sess_ops);
1314 }
1315 
1316 static int iscsit_do_rx_data(
1317 	struct iscsi_conn *conn,
1318 	struct iscsi_data_count *count)
1319 {
1320 	int data = count->data_length, rx_loop = 0, total_rx = 0, iov_len;
1321 	struct kvec *iov_p;
1322 	struct msghdr msg;
1323 
1324 	if (!conn || !conn->sock || !conn->conn_ops)
1325 		return -1;
1326 
1327 	memset(&msg, 0, sizeof(struct msghdr));
1328 
1329 	iov_p = count->iov;
1330 	iov_len	= count->iov_count;
1331 
1332 	while (total_rx < data) {
1333 		rx_loop = kernel_recvmsg(conn->sock, &msg, iov_p, iov_len,
1334 					(data - total_rx), MSG_WAITALL);
1335 		if (rx_loop <= 0) {
1336 			pr_debug("rx_loop: %d total_rx: %d\n",
1337 				rx_loop, total_rx);
1338 			return rx_loop;
1339 		}
1340 		total_rx += rx_loop;
1341 		pr_debug("rx_loop: %d, total_rx: %d, data: %d\n",
1342 				rx_loop, total_rx, data);
1343 	}
1344 
1345 	return total_rx;
1346 }
1347 
1348 static int iscsit_do_tx_data(
1349 	struct iscsi_conn *conn,
1350 	struct iscsi_data_count *count)
1351 {
1352 	int data = count->data_length, total_tx = 0, tx_loop = 0, iov_len;
1353 	struct kvec *iov_p;
1354 	struct msghdr msg;
1355 
1356 	if (!conn || !conn->sock || !conn->conn_ops)
1357 		return -1;
1358 
1359 	if (data <= 0) {
1360 		pr_err("Data length is: %d\n", data);
1361 		return -1;
1362 	}
1363 
1364 	memset(&msg, 0, sizeof(struct msghdr));
1365 
1366 	iov_p = count->iov;
1367 	iov_len = count->iov_count;
1368 
1369 	while (total_tx < data) {
1370 		tx_loop = kernel_sendmsg(conn->sock, &msg, iov_p, iov_len,
1371 					(data - total_tx));
1372 		if (tx_loop <= 0) {
1373 			pr_debug("tx_loop: %d total_tx %d\n",
1374 				tx_loop, total_tx);
1375 			return tx_loop;
1376 		}
1377 		total_tx += tx_loop;
1378 		pr_debug("tx_loop: %d, total_tx: %d, data: %d\n",
1379 					tx_loop, total_tx, data);
1380 	}
1381 
1382 	return total_tx;
1383 }
1384 
1385 int rx_data(
1386 	struct iscsi_conn *conn,
1387 	struct kvec *iov,
1388 	int iov_count,
1389 	int data)
1390 {
1391 	struct iscsi_data_count c;
1392 
1393 	if (!conn || !conn->sock || !conn->conn_ops)
1394 		return -1;
1395 
1396 	memset(&c, 0, sizeof(struct iscsi_data_count));
1397 	c.iov = iov;
1398 	c.iov_count = iov_count;
1399 	c.data_length = data;
1400 	c.type = ISCSI_RX_DATA;
1401 
1402 	return iscsit_do_rx_data(conn, &c);
1403 }
1404 
1405 int tx_data(
1406 	struct iscsi_conn *conn,
1407 	struct kvec *iov,
1408 	int iov_count,
1409 	int data)
1410 {
1411 	struct iscsi_data_count c;
1412 
1413 	if (!conn || !conn->sock || !conn->conn_ops)
1414 		return -1;
1415 
1416 	memset(&c, 0, sizeof(struct iscsi_data_count));
1417 	c.iov = iov;
1418 	c.iov_count = iov_count;
1419 	c.data_length = data;
1420 	c.type = ISCSI_TX_DATA;
1421 
1422 	return iscsit_do_tx_data(conn, &c);
1423 }
1424 
1425 void iscsit_collect_login_stats(
1426 	struct iscsi_conn *conn,
1427 	u8 status_class,
1428 	u8 status_detail)
1429 {
1430 	struct iscsi_param *intrname = NULL;
1431 	struct iscsi_tiqn *tiqn;
1432 	struct iscsi_login_stats *ls;
1433 
1434 	tiqn = iscsit_snmp_get_tiqn(conn);
1435 	if (!tiqn)
1436 		return;
1437 
1438 	ls = &tiqn->login_stats;
1439 
1440 	spin_lock(&ls->lock);
1441 	if (!strcmp(conn->login_ip, ls->last_intr_fail_ip_addr) &&
1442 	    ((get_jiffies_64() - ls->last_fail_time) < 10)) {
1443 		/* We already have the failure info for this login */
1444 		spin_unlock(&ls->lock);
1445 		return;
1446 	}
1447 
1448 	if (status_class == ISCSI_STATUS_CLS_SUCCESS)
1449 		ls->accepts++;
1450 	else if (status_class == ISCSI_STATUS_CLS_REDIRECT) {
1451 		ls->redirects++;
1452 		ls->last_fail_type = ISCSI_LOGIN_FAIL_REDIRECT;
1453 	} else if ((status_class == ISCSI_STATUS_CLS_INITIATOR_ERR)  &&
1454 		 (status_detail == ISCSI_LOGIN_STATUS_AUTH_FAILED)) {
1455 		ls->authenticate_fails++;
1456 		ls->last_fail_type =  ISCSI_LOGIN_FAIL_AUTHENTICATE;
1457 	} else if ((status_class == ISCSI_STATUS_CLS_INITIATOR_ERR)  &&
1458 		 (status_detail == ISCSI_LOGIN_STATUS_TGT_FORBIDDEN)) {
1459 		ls->authorize_fails++;
1460 		ls->last_fail_type = ISCSI_LOGIN_FAIL_AUTHORIZE;
1461 	} else if ((status_class == ISCSI_STATUS_CLS_INITIATOR_ERR) &&
1462 		 (status_detail == ISCSI_LOGIN_STATUS_INIT_ERR)) {
1463 		ls->negotiate_fails++;
1464 		ls->last_fail_type = ISCSI_LOGIN_FAIL_NEGOTIATE;
1465 	} else {
1466 		ls->other_fails++;
1467 		ls->last_fail_type = ISCSI_LOGIN_FAIL_OTHER;
1468 	}
1469 
1470 	/* Save initiator name, ip address and time, if it is a failed login */
1471 	if (status_class != ISCSI_STATUS_CLS_SUCCESS) {
1472 		if (conn->param_list)
1473 			intrname = iscsi_find_param_from_key(INITIATORNAME,
1474 							     conn->param_list);
1475 		strcpy(ls->last_intr_fail_name,
1476 		       (intrname ? intrname->value : "Unknown"));
1477 
1478 		ls->last_intr_fail_ip_family = conn->login_family;
1479 
1480 		snprintf(ls->last_intr_fail_ip_addr, IPV6_ADDRESS_SPACE,
1481 				"%s", conn->login_ip);
1482 		ls->last_fail_time = get_jiffies_64();
1483 	}
1484 
1485 	spin_unlock(&ls->lock);
1486 }
1487 
1488 struct iscsi_tiqn *iscsit_snmp_get_tiqn(struct iscsi_conn *conn)
1489 {
1490 	struct iscsi_portal_group *tpg;
1491 
1492 	if (!conn || !conn->sess)
1493 		return NULL;
1494 
1495 	tpg = conn->sess->tpg;
1496 	if (!tpg)
1497 		return NULL;
1498 
1499 	if (!tpg->tpg_tiqn)
1500 		return NULL;
1501 
1502 	return tpg->tpg_tiqn;
1503 }
1504