Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
libiscsi.c
Go to the documentation of this file.
1 /*
2  * iSCSI lib functions
3  *
4  * Copyright (C) 2006 Red Hat, Inc. All rights reserved.
5  * Copyright (C) 2004 - 2006 Mike Christie
6  * Copyright (C) 2004 - 2005 Dmitry Yusupov
7  * Copyright (C) 2004 - 2005 Alex Aizman
8  * maintained by [email protected]
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 by
12  * 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,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23  */
24 #include <linux/types.h>
25 #include <linux/kfifo.h>
26 #include <linux/delay.h>
27 #include <linux/log2.h>
28 #include <linux/slab.h>
29 #include <linux/module.h>
30 #include <asm/unaligned.h>
31 #include <net/tcp.h>
32 #include <scsi/scsi_cmnd.h>
33 #include <scsi/scsi_device.h>
34 #include <scsi/scsi_eh.h>
35 #include <scsi/scsi_tcq.h>
36 #include <scsi/scsi_host.h>
37 #include <scsi/scsi.h>
38 #include <scsi/iscsi_proto.h>
39 #include <scsi/scsi_transport.h>
41 #include <scsi/libiscsi.h>
42 
43 static int iscsi_dbg_lib_conn;
44 module_param_named(debug_libiscsi_conn, iscsi_dbg_lib_conn, int,
45  S_IRUGO | S_IWUSR);
46 MODULE_PARM_DESC(debug_libiscsi_conn,
47  "Turn on debugging for connections in libiscsi module. "
48  "Set to 1 to turn on, and zero to turn off. Default is off.");
49 
50 static int iscsi_dbg_lib_session;
51 module_param_named(debug_libiscsi_session, iscsi_dbg_lib_session, int,
52  S_IRUGO | S_IWUSR);
53 MODULE_PARM_DESC(debug_libiscsi_session,
54  "Turn on debugging for sessions in libiscsi module. "
55  "Set to 1 to turn on, and zero to turn off. Default is off.");
56 
57 static int iscsi_dbg_lib_eh;
58 module_param_named(debug_libiscsi_eh, iscsi_dbg_lib_eh, int,
59  S_IRUGO | S_IWUSR);
60 MODULE_PARM_DESC(debug_libiscsi_eh,
61  "Turn on debugging for error handling in libiscsi module. "
62  "Set to 1 to turn on, and zero to turn off. Default is off.");
63 
64 #define ISCSI_DBG_CONN(_conn, dbg_fmt, arg...) \
65  do { \
66  if (iscsi_dbg_lib_conn) \
67  iscsi_conn_printk(KERN_INFO, _conn, \
68  "%s " dbg_fmt, \
69  __func__, ##arg); \
70  } while (0);
71 
72 #define ISCSI_DBG_SESSION(_session, dbg_fmt, arg...) \
73  do { \
74  if (iscsi_dbg_lib_session) \
75  iscsi_session_printk(KERN_INFO, _session, \
76  "%s " dbg_fmt, \
77  __func__, ##arg); \
78  } while (0);
79 
80 #define ISCSI_DBG_EH(_session, dbg_fmt, arg...) \
81  do { \
82  if (iscsi_dbg_lib_eh) \
83  iscsi_session_printk(KERN_INFO, _session, \
84  "%s " dbg_fmt, \
85  __func__, ##arg); \
86  } while (0);
87 
88 inline void iscsi_conn_queue_work(struct iscsi_conn *conn)
89 {
90  struct Scsi_Host *shost = conn->session->host;
91  struct iscsi_host *ihost = shost_priv(shost);
92 
93  if (ihost->workq)
94  queue_work(ihost->workq, &conn->xmitwork);
95 }
97 
98 static void __iscsi_update_cmdsn(struct iscsi_session *session,
99  uint32_t exp_cmdsn, uint32_t max_cmdsn)
100 {
101  /*
102  * standard specifies this check for when to update expected and
103  * max sequence numbers
104  */
105  if (iscsi_sna_lt(max_cmdsn, exp_cmdsn - 1))
106  return;
107 
108  if (exp_cmdsn != session->exp_cmdsn &&
109  !iscsi_sna_lt(exp_cmdsn, session->exp_cmdsn))
110  session->exp_cmdsn = exp_cmdsn;
111 
112  if (max_cmdsn != session->max_cmdsn &&
113  !iscsi_sna_lt(max_cmdsn, session->max_cmdsn)) {
114  session->max_cmdsn = max_cmdsn;
115  /*
116  * if the window closed with IO queued, then kick the
117  * xmit thread
118  */
119  if (!list_empty(&session->leadconn->cmdqueue) ||
120  !list_empty(&session->leadconn->mgmtqueue))
122  }
123 }
124 
125 void iscsi_update_cmdsn(struct iscsi_session *session, struct iscsi_nopin *hdr)
126 {
127  __iscsi_update_cmdsn(session, be32_to_cpu(hdr->exp_cmdsn),
128  be32_to_cpu(hdr->max_cmdsn));
129 }
131 
145  struct iscsi_data *hdr)
146 {
147  struct iscsi_conn *conn = task->conn;
148  unsigned int left = r2t->data_length - r2t->sent;
149 
150  task->hdr_len = sizeof(struct iscsi_data);
151 
152  memset(hdr, 0, sizeof(struct iscsi_data));
153  hdr->ttt = r2t->ttt;
154  hdr->datasn = cpu_to_be32(r2t->datasn);
155  r2t->datasn++;
157  hdr->lun = task->lun;
158  hdr->itt = task->hdr_itt;
159  hdr->exp_statsn = r2t->exp_statsn;
160  hdr->offset = cpu_to_be32(r2t->data_offset + r2t->sent);
161  if (left > conn->max_xmit_dlength) {
162  hton24(hdr->dlength, conn->max_xmit_dlength);
163  r2t->data_count = conn->max_xmit_dlength;
164  hdr->flags = 0;
165  } else {
166  hton24(hdr->dlength, left);
167  r2t->data_count = left;
169  }
170  conn->dataout_pdus_cnt++;
171 }
173 
174 static int iscsi_add_hdr(struct iscsi_task *task, unsigned len)
175 {
176  unsigned exp_len = task->hdr_len + len;
177 
178  if (exp_len > task->hdr_max) {
179  WARN_ON(1);
180  return -EINVAL;
181  }
182 
183  WARN_ON(len & (ISCSI_PAD_LEN - 1)); /* caller must pad the AHS */
184  task->hdr_len = exp_len;
185  return 0;
186 }
187 
188 /*
189  * make an extended cdb AHS
190  */
191 static int iscsi_prep_ecdb_ahs(struct iscsi_task *task)
192 {
193  struct scsi_cmnd *cmd = task->sc;
194  unsigned rlen, pad_len;
195  unsigned short ahslength;
196  struct iscsi_ecdb_ahdr *ecdb_ahdr;
197  int rc;
198 
199  ecdb_ahdr = iscsi_next_hdr(task);
200  rlen = cmd->cmd_len - ISCSI_CDB_SIZE;
201 
202  BUG_ON(rlen > sizeof(ecdb_ahdr->ecdb));
203  ahslength = rlen + sizeof(ecdb_ahdr->reserved);
204 
205  pad_len = iscsi_padding(rlen);
206 
207  rc = iscsi_add_hdr(task, sizeof(ecdb_ahdr->ahslength) +
208  sizeof(ecdb_ahdr->ahstype) + ahslength + pad_len);
209  if (rc)
210  return rc;
211 
212  if (pad_len)
213  memset(&ecdb_ahdr->ecdb[rlen], 0, pad_len);
214 
215  ecdb_ahdr->ahslength = cpu_to_be16(ahslength);
216  ecdb_ahdr->ahstype = ISCSI_AHSTYPE_CDB;
217  ecdb_ahdr->reserved = 0;
218  memcpy(ecdb_ahdr->ecdb, cmd->cmnd + ISCSI_CDB_SIZE, rlen);
219 
220  ISCSI_DBG_SESSION(task->conn->session,
221  "iscsi_prep_ecdb_ahs: varlen_cdb_len %d "
222  "rlen %d pad_len %d ahs_length %d iscsi_headers_size "
223  "%u\n", cmd->cmd_len, rlen, pad_len, ahslength,
224  task->hdr_len);
225  return 0;
226 }
227 
228 static int iscsi_prep_bidi_ahs(struct iscsi_task *task)
229 {
230  struct scsi_cmnd *sc = task->sc;
231  struct iscsi_rlength_ahdr *rlen_ahdr;
232  int rc;
233 
234  rlen_ahdr = iscsi_next_hdr(task);
235  rc = iscsi_add_hdr(task, sizeof(*rlen_ahdr));
236  if (rc)
237  return rc;
238 
239  rlen_ahdr->ahslength =
240  cpu_to_be16(sizeof(rlen_ahdr->read_length) +
241  sizeof(rlen_ahdr->reserved));
242  rlen_ahdr->ahstype = ISCSI_AHSTYPE_RLENGTH;
243  rlen_ahdr->reserved = 0;
244  rlen_ahdr->read_length = cpu_to_be32(scsi_in(sc)->length);
245 
246  ISCSI_DBG_SESSION(task->conn->session,
247  "bidi-in rlen_ahdr->read_length(%d) "
248  "rlen_ahdr->ahslength(%d)\n",
249  be32_to_cpu(rlen_ahdr->read_length),
250  be16_to_cpu(rlen_ahdr->ahslength));
251  return 0;
252 }
253 
267 static int iscsi_check_tmf_restrictions(struct iscsi_task *task, int opcode)
268 {
269  struct iscsi_conn *conn = task->conn;
270  struct iscsi_tm *tmf = &conn->tmhdr;
271  unsigned int hdr_lun;
272 
273  if (conn->tmf_state == TMF_INITIAL)
274  return 0;
275 
277  return 0;
278 
279  switch (ISCSI_TM_FUNC_VALUE(tmf)) {
281  /*
282  * Allow PDUs for unrelated LUNs
283  */
284  hdr_lun = scsilun_to_int(&tmf->lun);
285  if (hdr_lun != task->sc->device->lun)
286  return 0;
287  /* fall through */
289  /*
290  * Fail all SCSI cmd PDUs
291  */
292  if (opcode != ISCSI_OP_SCSI_DATA_OUT) {
294  "task [op %x/%x itt "
295  "0x%x/0x%x] "
296  "rejected.\n",
297  task->hdr->opcode, opcode,
298  task->itt, task->hdr_itt);
299  return -EACCES;
300  }
301  /*
302  * And also all data-out PDUs in response to R2T
303  * if fast_abort is set.
304  */
305  if (conn->session->fast_abort) {
307  "task [op %x/%x itt "
308  "0x%x/0x%x] fast abort.\n",
309  task->hdr->opcode, opcode,
310  task->itt, task->hdr_itt);
311  return -EACCES;
312  }
313  break;
315  /*
316  * the caller has already checked if the task
317  * they want to abort was in the pending queue so if
318  * we are here the cmd pdu has gone out already, and
319  * we will only hit this for data-outs
320  */
321  if (opcode == ISCSI_OP_SCSI_DATA_OUT &&
322  task->hdr_itt == tmf->rtt) {
324  "Preventing task %x/%x from sending "
325  "data-out due to abort task in "
326  "progress\n", task->itt,
327  task->hdr_itt);
328  return -EACCES;
329  }
330  break;
331  }
332 
333  return 0;
334 }
335 
343 static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task)
344 {
345  struct iscsi_conn *conn = task->conn;
346  struct iscsi_session *session = conn->session;
347  struct scsi_cmnd *sc = task->sc;
348  struct iscsi_scsi_req *hdr;
349  unsigned hdrlength, cmd_len;
350  itt_t itt;
351  int rc;
352 
353  rc = iscsi_check_tmf_restrictions(task, ISCSI_OP_SCSI_CMD);
354  if (rc)
355  return rc;
356 
357  if (conn->session->tt->alloc_pdu) {
358  rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD);
359  if (rc)
360  return rc;
361  }
362  hdr = (struct iscsi_scsi_req *)task->hdr;
363  itt = hdr->itt;
364  memset(hdr, 0, sizeof(*hdr));
365 
366  if (session->tt->parse_pdu_itt)
367  hdr->itt = task->hdr_itt = itt;
368  else
369  hdr->itt = task->hdr_itt = build_itt(task->itt,
370  task->conn->session->age);
371  task->hdr_len = 0;
372  rc = iscsi_add_hdr(task, sizeof(*hdr));
373  if (rc)
374  return rc;
375  hdr->opcode = ISCSI_OP_SCSI_CMD;
376  hdr->flags = ISCSI_ATTR_SIMPLE;
377  int_to_scsilun(sc->device->lun, &hdr->lun);
378  task->lun = hdr->lun;
379  hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
380  cmd_len = sc->cmd_len;
381  if (cmd_len < ISCSI_CDB_SIZE)
382  memset(&hdr->cdb[cmd_len], 0, ISCSI_CDB_SIZE - cmd_len);
383  else if (cmd_len > ISCSI_CDB_SIZE) {
384  rc = iscsi_prep_ecdb_ahs(task);
385  if (rc)
386  return rc;
387  cmd_len = ISCSI_CDB_SIZE;
388  }
389  memcpy(hdr->cdb, sc->cmnd, cmd_len);
390 
391  task->imm_count = 0;
392  if (scsi_bidi_cmnd(sc)) {
393  hdr->flags |= ISCSI_FLAG_CMD_READ;
394  rc = iscsi_prep_bidi_ahs(task);
395  if (rc)
396  return rc;
397  }
398  if (sc->sc_data_direction == DMA_TO_DEVICE) {
399  unsigned out_len = scsi_out(sc)->length;
400  struct iscsi_r2t_info *r2t = &task->unsol_r2t;
401 
402  hdr->data_length = cpu_to_be32(out_len);
403  hdr->flags |= ISCSI_FLAG_CMD_WRITE;
404  /*
405  * Write counters:
406  *
407  * imm_count bytes to be sent right after
408  * SCSI PDU Header
409  *
410  * unsol_count bytes(as Data-Out) to be sent
411  * without R2T ack right after
412  * immediate data
413  *
414  * r2t data_length bytes to be sent via R2T ack's
415  *
416  * pad_count bytes to be sent as zero-padding
417  */
418  memset(r2t, 0, sizeof(*r2t));
419 
420  if (session->imm_data_en) {
421  if (out_len >= session->first_burst)
422  task->imm_count = min(session->first_burst,
423  conn->max_xmit_dlength);
424  else
425  task->imm_count = min(out_len,
426  conn->max_xmit_dlength);
427  hton24(hdr->dlength, task->imm_count);
428  } else
429  zero_data(hdr->dlength);
430 
431  if (!session->initial_r2t_en) {
432  r2t->data_length = min(session->first_burst, out_len) -
433  task->imm_count;
434  r2t->data_offset = task->imm_count;
436  r2t->exp_statsn = cpu_to_be32(conn->exp_statsn);
437  }
438 
439  if (!task->unsol_r2t.data_length)
440  /* No unsolicit Data-Out's */
441  hdr->flags |= ISCSI_FLAG_CMD_FINAL;
442  } else {
443  hdr->flags |= ISCSI_FLAG_CMD_FINAL;
444  zero_data(hdr->dlength);
445  hdr->data_length = cpu_to_be32(scsi_in(sc)->length);
446 
448  hdr->flags |= ISCSI_FLAG_CMD_READ;
449  }
450 
451  /* calculate size of additional header segments (AHSs) */
452  hdrlength = task->hdr_len - sizeof(*hdr);
453 
454  WARN_ON(hdrlength & (ISCSI_PAD_LEN-1));
455  hdrlength /= ISCSI_PAD_LEN;
456 
457  WARN_ON(hdrlength >= 256);
458  hdr->hlength = hdrlength & 0xFF;
459  hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn);
460 
461  if (session->tt->init_task && session->tt->init_task(task))
462  return -EIO;
463 
464  task->state = ISCSI_TASK_RUNNING;
465  session->cmdsn++;
466 
467  conn->scsicmd_pdus_cnt++;
468  ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x "
469  "itt 0x%x len %d bidi_len %d cmdsn %d win %d]\n",
470  scsi_bidi_cmnd(sc) ? "bidirectional" :
472  "write" : "read", conn->id, sc, sc->cmnd[0],
473  task->itt, scsi_bufflen(sc),
474  scsi_bidi_cmnd(sc) ? scsi_in(sc)->length : 0,
475  session->cmdsn,
476  session->max_cmdsn - session->exp_cmdsn + 1);
477  return 0;
478 }
479 
488 static void iscsi_free_task(struct iscsi_task *task)
489 {
490  struct iscsi_conn *conn = task->conn;
491  struct iscsi_session *session = conn->session;
492  struct scsi_cmnd *sc = task->sc;
493  int oldstate = task->state;
494 
495  ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n",
496  task->itt, task->state, task->sc);
497 
498  session->tt->cleanup_task(task);
499  task->state = ISCSI_TASK_FREE;
500  task->sc = NULL;
501  /*
502  * login task is preallocated so do not free
503  */
504  if (conn->login_task == task)
505  return;
506 
507  kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*));
508 
509  if (sc) {
510  task->sc = NULL;
511  /* SCSI eh reuses commands to verify us */
512  sc->SCp.ptr = NULL;
513  /*
514  * queue command may call this to free the task, so
515  * it will decide how to return sc to scsi-ml.
516  */
517  if (oldstate != ISCSI_TASK_REQUEUE_SCSIQ)
518  sc->scsi_done(sc);
519  }
520 }
521 
522 void __iscsi_get_task(struct iscsi_task *task)
523 {
524  atomic_inc(&task->refcount);
525 }
527 
528 void __iscsi_put_task(struct iscsi_task *task)
529 {
530  if (atomic_dec_and_test(&task->refcount))
531  iscsi_free_task(task);
532 }
534 
535 void iscsi_put_task(struct iscsi_task *task)
536 {
537  struct iscsi_session *session = task->conn->session;
538 
539  spin_lock_bh(&session->lock);
540  __iscsi_put_task(task);
541  spin_unlock_bh(&session->lock);
542 }
544 
552 static void iscsi_complete_task(struct iscsi_task *task, int state)
553 {
554  struct iscsi_conn *conn = task->conn;
555 
557  "complete task itt 0x%x state %d sc %p\n",
558  task->itt, task->state, task->sc);
559  if (task->state == ISCSI_TASK_COMPLETED ||
560  task->state == ISCSI_TASK_ABRT_TMF ||
563  return;
565  task->state = state;
566 
567  if (!list_empty(&task->running))
568  list_del_init(&task->running);
569 
570  if (conn->task == task)
571  conn->task = NULL;
572 
573  if (conn->ping_task == task)
574  conn->ping_task = NULL;
575 
576  /* release get from queueing */
577  __iscsi_put_task(task);
578 }
579 
592  uint32_t exp_cmdsn, uint32_t max_cmdsn)
593 {
594  struct iscsi_conn *conn = task->conn;
595 
596  ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt);
597 
598  conn->last_recv = jiffies;
599  __iscsi_update_cmdsn(conn->session, exp_cmdsn, max_cmdsn);
600  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
601 }
603 
604 
605 /*
606  * session lock must be held and if not called for a task that is
607  * still pending or from the xmit thread, then xmit thread must
608  * be suspended.
609  */
610 static void fail_scsi_task(struct iscsi_task *task, int err)
611 {
612  struct iscsi_conn *conn = task->conn;
613  struct scsi_cmnd *sc;
614  int state;
615 
616  /*
617  * if a command completes and we get a successful tmf response
618  * we will hit this because the scsi eh abort code does not take
619  * a ref to the task.
620  */
621  sc = task->sc;
622  if (!sc)
623  return;
624 
625  if (task->state == ISCSI_TASK_PENDING) {
626  /*
627  * cmd never made it to the xmit thread, so we should not count
628  * the cmd in the sequencing
629  */
630  conn->session->queued_cmdsn--;
631  /* it was never sent so just complete like normal */
632  state = ISCSI_TASK_COMPLETED;
633  } else if (err == DID_TRANSPORT_DISRUPTED)
635  else
636  state = ISCSI_TASK_ABRT_TMF;
637 
638  sc->result = err << 16;
639  if (!scsi_bidi_cmnd(sc))
640  scsi_set_resid(sc, scsi_bufflen(sc));
641  else {
642  scsi_out(sc)->resid = scsi_out(sc)->length;
643  scsi_in(sc)->resid = scsi_in(sc)->length;
644  }
645 
646  iscsi_complete_task(task, state);
647 }
648 
649 static int iscsi_prep_mgmt_task(struct iscsi_conn *conn,
650  struct iscsi_task *task)
651 {
652  struct iscsi_session *session = conn->session;
653  struct iscsi_hdr *hdr = task->hdr;
654  struct iscsi_nopout *nop = (struct iscsi_nopout *)hdr;
655  uint8_t opcode = hdr->opcode & ISCSI_OPCODE_MASK;
656 
657  if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
658  return -ENOTCONN;
659 
660  if (opcode != ISCSI_OP_LOGIN && opcode != ISCSI_OP_TEXT)
661  nop->exp_statsn = cpu_to_be32(conn->exp_statsn);
662  /*
663  * pre-format CmdSN for outgoing PDU.
664  */
665  nop->cmdsn = cpu_to_be32(session->cmdsn);
666  if (hdr->itt != RESERVED_ITT) {
667  /*
668  * TODO: We always use immediate for normal session pdus.
669  * If we start to send tmfs or nops as non-immediate then
670  * we should start checking the cmdsn numbers for mgmt tasks.
671  *
672  * During discovery sessions iscsid sends TEXT as non immediate,
673  * but we always only send one PDU at a time.
674  */
675  if (conn->c_stage == ISCSI_CONN_STARTED &&
676  !(hdr->opcode & ISCSI_OP_IMMEDIATE)) {
677  session->queued_cmdsn++;
678  session->cmdsn++;
679  }
680  }
681 
682  if (session->tt->init_task && session->tt->init_task(task))
683  return -EIO;
684 
685  if ((hdr->opcode & ISCSI_OPCODE_MASK) == ISCSI_OP_LOGOUT)
686  session->state = ISCSI_STATE_LOGGING_OUT;
687 
688  task->state = ISCSI_TASK_RUNNING;
689  ISCSI_DBG_SESSION(session, "mgmtpdu [op 0x%x hdr->itt 0x%x "
690  "datalen %d]\n", hdr->opcode & ISCSI_OPCODE_MASK,
691  hdr->itt, task->data_count);
692  return 0;
693 }
694 
695 static struct iscsi_task *
696 __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
697  char *data, uint32_t data_size)
698 {
699  struct iscsi_session *session = conn->session;
700  struct iscsi_host *ihost = shost_priv(session->host);
701  uint8_t opcode = hdr->opcode & ISCSI_OPCODE_MASK;
702  struct iscsi_task *task;
703  itt_t itt;
704 
705  if (session->state == ISCSI_STATE_TERMINATE)
706  return NULL;
707 
708  if (opcode == ISCSI_OP_LOGIN || opcode == ISCSI_OP_TEXT) {
709  /*
710  * Login and Text are sent serially, in
711  * request-followed-by-response sequence.
712  * Same task can be used. Same ITT must be used.
713  * Note that login_task is preallocated at conn_create().
714  */
715  if (conn->login_task->state != ISCSI_TASK_FREE) {
716  iscsi_conn_printk(KERN_ERR, conn, "Login/Text in "
717  "progress. Cannot start new task.\n");
718  return NULL;
719  }
720 
721  task = conn->login_task;
722  } else {
723  if (session->state != ISCSI_STATE_LOGGED_IN)
724  return NULL;
725 
728 
729  if (!kfifo_out(&session->cmdpool.queue,
730  (void*)&task, sizeof(void*)))
731  return NULL;
732  }
733  /*
734  * released in complete pdu for task we expect a response for, and
735  * released by the lld when it has transmitted the task for
736  * pdus we do not expect a response for.
737  */
738  atomic_set(&task->refcount, 1);
739  task->conn = conn;
740  task->sc = NULL;
741  INIT_LIST_HEAD(&task->running);
742  task->state = ISCSI_TASK_PENDING;
743 
744  if (data_size) {
745  memcpy(task->data, data, data_size);
746  task->data_count = data_size;
747  } else
748  task->data_count = 0;
749 
750  if (conn->session->tt->alloc_pdu) {
751  if (conn->session->tt->alloc_pdu(task, hdr->opcode)) {
752  iscsi_conn_printk(KERN_ERR, conn, "Could not allocate "
753  "pdu for mgmt task.\n");
754  goto free_task;
755  }
756  }
757 
758  itt = task->hdr->itt;
759  task->hdr_len = sizeof(struct iscsi_hdr);
760  memcpy(task->hdr, hdr, sizeof(struct iscsi_hdr));
761 
762  if (hdr->itt != RESERVED_ITT) {
763  if (session->tt->parse_pdu_itt)
764  task->hdr->itt = itt;
765  else
766  task->hdr->itt = build_itt(task->itt,
767  task->conn->session->age);
768  }
769 
770  if (!ihost->workq) {
771  if (iscsi_prep_mgmt_task(conn, task))
772  goto free_task;
773 
774  if (session->tt->xmit_task(task))
775  goto free_task;
776  } else {
777  list_add_tail(&task->running, &conn->mgmtqueue);
778  iscsi_conn_queue_work(conn);
779  }
780 
781  return task;
782 
783 free_task:
784  __iscsi_put_task(task);
785  return NULL;
786 }
787 
788 int iscsi_conn_send_pdu(struct iscsi_cls_conn *cls_conn, struct iscsi_hdr *hdr,
789  char *data, uint32_t data_size)
790 {
791  struct iscsi_conn *conn = cls_conn->dd_data;
792  struct iscsi_session *session = conn->session;
793  int err = 0;
794 
795  spin_lock_bh(&session->lock);
796  if (!__iscsi_conn_send_pdu(conn, hdr, data, data_size))
797  err = -EPERM;
798  spin_unlock_bh(&session->lock);
799  return err;
800 }
802 
814 static void iscsi_scsi_cmd_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
815  struct iscsi_task *task, char *data,
816  int datalen)
817 {
818  struct iscsi_scsi_rsp *rhdr = (struct iscsi_scsi_rsp *)hdr;
819  struct iscsi_session *session = conn->session;
820  struct scsi_cmnd *sc = task->sc;
821 
822  iscsi_update_cmdsn(session, (struct iscsi_nopin*)rhdr);
823  conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
824 
825  sc->result = (DID_OK << 16) | rhdr->cmd_status;
826 
828  sc->result = DID_ERROR << 16;
829  goto out;
830  }
831 
832  if (rhdr->cmd_status == SAM_STAT_CHECK_CONDITION) {
833  uint16_t senselen;
834 
835  if (datalen < 2) {
836 invalid_datalen:
838  "Got CHECK_CONDITION but invalid data "
839  "buffer size of %d\n", datalen);
840  sc->result = DID_BAD_TARGET << 16;
841  goto out;
842  }
843 
844  senselen = get_unaligned_be16(data);
845  if (datalen < senselen)
846  goto invalid_datalen;
847 
848  memcpy(sc->sense_buffer, data + 2,
849  min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
850  ISCSI_DBG_SESSION(session, "copied %d bytes of sense\n",
851  min_t(uint16_t, senselen,
853  }
854 
855  if (rhdr->flags & (ISCSI_FLAG_CMD_BIDI_UNDERFLOW |
858 
859  if (scsi_bidi_cmnd(sc) && res_count > 0 &&
861  res_count <= scsi_in(sc)->length))
862  scsi_in(sc)->resid = res_count;
863  else
864  sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
865  }
866 
867  if (rhdr->flags & (ISCSI_FLAG_CMD_UNDERFLOW |
869  int res_count = be32_to_cpu(rhdr->residual_count);
870 
871  if (res_count > 0 &&
872  (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW ||
873  res_count <= scsi_bufflen(sc)))
874  /* write side for bidi or uni-io set_resid */
875  scsi_set_resid(sc, res_count);
876  else
877  sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
878  }
879 out:
880  ISCSI_DBG_SESSION(session, "cmd rsp done [sc %p res %d itt 0x%x]\n",
881  sc, sc->result, task->itt);
882  conn->scsirsp_pdus_cnt++;
883  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
884 }
885 
892 static void
893 iscsi_data_in_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
894  struct iscsi_task *task)
895 {
896  struct iscsi_data_rsp *rhdr = (struct iscsi_data_rsp *)hdr;
897  struct scsi_cmnd *sc = task->sc;
898 
899  if (!(rhdr->flags & ISCSI_FLAG_DATA_STATUS))
900  return;
901 
902  iscsi_update_cmdsn(conn->session, (struct iscsi_nopin *)hdr);
903  sc->result = (DID_OK << 16) | rhdr->cmd_status;
904  conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
905  if (rhdr->flags & (ISCSI_FLAG_DATA_UNDERFLOW |
907  int res_count = be32_to_cpu(rhdr->residual_count);
908 
909  if (res_count > 0 &&
910  (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW ||
911  res_count <= scsi_in(sc)->length))
912  scsi_in(sc)->resid = res_count;
913  else
914  sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
915  }
916 
917  ISCSI_DBG_SESSION(conn->session, "data in with status done "
918  "[sc %p res %d itt 0x%x]\n",
919  sc, sc->result, task->itt);
920  conn->scsirsp_pdus_cnt++;
921  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
922 }
923 
924 static void iscsi_tmf_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr)
925 {
926  struct iscsi_tm_rsp *tmf = (struct iscsi_tm_rsp *)hdr;
927 
928  conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
929  conn->tmfrsp_pdus_cnt++;
930 
931  if (conn->tmf_state != TMF_QUEUED)
932  return;
933 
934  if (tmf->response == ISCSI_TMF_RSP_COMPLETE)
935  conn->tmf_state = TMF_SUCCESS;
936  else if (tmf->response == ISCSI_TMF_RSP_NO_TASK)
937  conn->tmf_state = TMF_NOT_FOUND;
938  else
939  conn->tmf_state = TMF_FAILED;
940  wake_up(&conn->ehwait);
941 }
942 
943 static void iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)
944 {
945  struct iscsi_nopout hdr;
946  struct iscsi_task *task;
947 
948  if (!rhdr && conn->ping_task)
949  return;
950 
951  memset(&hdr, 0, sizeof(struct iscsi_nopout));
954 
955  if (rhdr) {
956  hdr.lun = rhdr->lun;
957  hdr.ttt = rhdr->ttt;
958  hdr.itt = RESERVED_ITT;
959  } else
960  hdr.ttt = RESERVED_ITT;
961 
962  task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0);
963  if (!task)
964  iscsi_conn_printk(KERN_ERR, conn, "Could not send nopout\n");
965  else if (!rhdr) {
966  /* only track our nops */
967  conn->ping_task = task;
968  conn->last_ping = jiffies;
969  }
970 }
971 
972 static int iscsi_nop_out_rsp(struct iscsi_task *task,
973  struct iscsi_nopin *nop, char *data, int datalen)
974 {
975  struct iscsi_conn *conn = task->conn;
976  int rc = 0;
977 
978  if (conn->ping_task != task) {
979  /*
980  * If this is not in response to one of our
981  * nops then it must be from userspace.
982  */
983  if (iscsi_recv_pdu(conn->cls_conn, (struct iscsi_hdr *)nop,
984  data, datalen))
986  } else
987  mod_timer(&conn->transport_timer, jiffies + conn->recv_timeout);
988  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
989  return rc;
990 }
991 
992 static int iscsi_handle_reject(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
993  char *data, int datalen)
994 {
995  struct iscsi_reject *reject = (struct iscsi_reject *)hdr;
996  struct iscsi_hdr rejected_pdu;
997  int opcode, rc = 0;
998 
999  conn->exp_statsn = be32_to_cpu(reject->statsn) + 1;
1000 
1001  if (ntoh24(reject->dlength) > datalen ||
1002  ntoh24(reject->dlength) < sizeof(struct iscsi_hdr)) {
1003  iscsi_conn_printk(KERN_ERR, conn, "Cannot handle rejected "
1004  "pdu. Invalid data length (pdu dlength "
1005  "%u, datalen %d\n", ntoh24(reject->dlength),
1006  datalen);
1007  return ISCSI_ERR_PROTO;
1008  }
1009  memcpy(&rejected_pdu, data, sizeof(struct iscsi_hdr));
1010  opcode = rejected_pdu.opcode & ISCSI_OPCODE_MASK;
1011 
1012  switch (reject->reason) {
1015  "pdu (op 0x%x itt 0x%x) rejected "
1016  "due to DataDigest error.\n",
1017  rejected_pdu.itt, opcode);
1018  break;
1021  "pdu (op 0x%x itt 0x%x) rejected. Too many "
1022  "immediate commands.\n",
1023  rejected_pdu.itt, opcode);
1024  /*
1025  * We only send one TMF at a time so if the target could not
1026  * handle it, then it should get fixed (RFC mandates that
1027  * a target can handle one immediate TMF per conn).
1028  *
1029  * For nops-outs, we could have sent more than one if
1030  * the target is sending us lots of nop-ins
1031  */
1032  if (opcode != ISCSI_OP_NOOP_OUT)
1033  return 0;
1034 
1035  if (rejected_pdu.itt == cpu_to_be32(ISCSI_RESERVED_TAG))
1036  /*
1037  * nop-out in response to target's nop-out rejected.
1038  * Just resend.
1039  */
1040  iscsi_send_nopout(conn,
1041  (struct iscsi_nopin*)&rejected_pdu);
1042  else {
1043  struct iscsi_task *task;
1044  /*
1045  * Our nop as ping got dropped. We know the target
1046  * and transport are ok so just clean up
1047  */
1048  task = iscsi_itt_to_task(conn, rejected_pdu.itt);
1049  if (!task) {
1051  "Invalid pdu reject. Could "
1052  "not lookup rejected task.\n");
1053  rc = ISCSI_ERR_BAD_ITT;
1054  } else
1055  rc = iscsi_nop_out_rsp(task,
1056  (struct iscsi_nopin*)&rejected_pdu,
1057  NULL, 0);
1058  }
1059  break;
1060  default:
1062  "pdu (op 0x%x itt 0x%x) rejected. Reason "
1063  "code 0x%x\n", rejected_pdu.itt,
1064  rejected_pdu.opcode, reject->reason);
1065  break;
1066  }
1067  return rc;
1068 }
1069 
1080 struct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *conn, itt_t itt)
1081 {
1082  struct iscsi_session *session = conn->session;
1083  int i;
1084 
1085  if (itt == RESERVED_ITT)
1086  return NULL;
1087 
1088  if (session->tt->parse_pdu_itt)
1089  session->tt->parse_pdu_itt(conn, itt, &i, NULL);
1090  else
1091  i = get_itt(itt);
1092  if (i >= session->cmds_max)
1093  return NULL;
1094 
1095  return session->cmds[i];
1096 }
1098 
1110 int __iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
1111  char *data, int datalen)
1112 {
1113  struct iscsi_session *session = conn->session;
1114  int opcode = hdr->opcode & ISCSI_OPCODE_MASK, rc = 0;
1115  struct iscsi_task *task;
1116  uint32_t itt;
1117 
1118  conn->last_recv = jiffies;
1119  rc = iscsi_verify_itt(conn, hdr->itt);
1120  if (rc)
1121  return rc;
1122 
1123  if (hdr->itt != RESERVED_ITT)
1124  itt = get_itt(hdr->itt);
1125  else
1126  itt = ~0U;
1127 
1128  ISCSI_DBG_SESSION(session, "[op 0x%x cid %d itt 0x%x len %d]\n",
1129  opcode, conn->id, itt, datalen);
1130 
1131  if (itt == ~0U) {
1132  iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1133 
1134  switch(opcode) {
1135  case ISCSI_OP_NOOP_IN:
1136  if (datalen) {
1137  rc = ISCSI_ERR_PROTO;
1138  break;
1139  }
1140 
1141  if (hdr->ttt == cpu_to_be32(ISCSI_RESERVED_TAG))
1142  break;
1143 
1144  iscsi_send_nopout(conn, (struct iscsi_nopin*)hdr);
1145  break;
1146  case ISCSI_OP_REJECT:
1147  rc = iscsi_handle_reject(conn, hdr, data, datalen);
1148  break;
1149  case ISCSI_OP_ASYNC_EVENT:
1150  conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
1151  if (iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen))
1152  rc = ISCSI_ERR_CONN_FAILED;
1153  break;
1154  default:
1155  rc = ISCSI_ERR_BAD_OPCODE;
1156  break;
1157  }
1158  goto out;
1159  }
1160 
1161  switch(opcode) {
1162  case ISCSI_OP_SCSI_CMD_RSP:
1163  case ISCSI_OP_SCSI_DATA_IN:
1164  task = iscsi_itt_to_ctask(conn, hdr->itt);
1165  if (!task)
1166  return ISCSI_ERR_BAD_ITT;
1167  task->last_xfer = jiffies;
1168  break;
1169  case ISCSI_OP_R2T:
1170  /*
1171  * LLD handles R2Ts if they need to.
1172  */
1173  return 0;
1174  case ISCSI_OP_LOGOUT_RSP:
1175  case ISCSI_OP_LOGIN_RSP:
1176  case ISCSI_OP_TEXT_RSP:
1178  case ISCSI_OP_NOOP_IN:
1179  task = iscsi_itt_to_task(conn, hdr->itt);
1180  if (!task)
1181  return ISCSI_ERR_BAD_ITT;
1182  break;
1183  default:
1184  return ISCSI_ERR_BAD_OPCODE;
1185  }
1186 
1187  switch(opcode) {
1188  case ISCSI_OP_SCSI_CMD_RSP:
1189  iscsi_scsi_cmd_rsp(conn, hdr, task, data, datalen);
1190  break;
1191  case ISCSI_OP_SCSI_DATA_IN:
1192  iscsi_data_in_rsp(conn, hdr, task);
1193  break;
1194  case ISCSI_OP_LOGOUT_RSP:
1195  iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1196  if (datalen) {
1197  rc = ISCSI_ERR_PROTO;
1198  break;
1199  }
1200  conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
1201  goto recv_pdu;
1202  case ISCSI_OP_LOGIN_RSP:
1203  case ISCSI_OP_TEXT_RSP:
1204  iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1205  /*
1206  * login related PDU's exp_statsn is handled in
1207  * userspace
1208  */
1209  goto recv_pdu;
1211  iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1212  if (datalen) {
1213  rc = ISCSI_ERR_PROTO;
1214  break;
1215  }
1216 
1217  iscsi_tmf_rsp(conn, hdr);
1218  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
1219  break;
1220  case ISCSI_OP_NOOP_IN:
1221  iscsi_update_cmdsn(session, (struct iscsi_nopin*)hdr);
1222  if (hdr->ttt != cpu_to_be32(ISCSI_RESERVED_TAG) || datalen) {
1223  rc = ISCSI_ERR_PROTO;
1224  break;
1225  }
1226  conn->exp_statsn = be32_to_cpu(hdr->statsn) + 1;
1227 
1228  rc = iscsi_nop_out_rsp(task, (struct iscsi_nopin*)hdr,
1229  data, datalen);
1230  break;
1231  default:
1232  rc = ISCSI_ERR_BAD_OPCODE;
1233  break;
1234  }
1235 
1236 out:
1237  return rc;
1238 recv_pdu:
1239  if (iscsi_recv_pdu(conn->cls_conn, hdr, data, datalen))
1240  rc = ISCSI_ERR_CONN_FAILED;
1241  iscsi_complete_task(task, ISCSI_TASK_COMPLETED);
1242  return rc;
1243 }
1245 
1246 int iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
1247  char *data, int datalen)
1248 {
1249  int rc;
1250 
1251  spin_lock(&conn->session->lock);
1252  rc = __iscsi_complete_pdu(conn, hdr, data, datalen);
1253  spin_unlock(&conn->session->lock);
1254  return rc;
1255 }
1257 
1258 int iscsi_verify_itt(struct iscsi_conn *conn, itt_t itt)
1259 {
1260  struct iscsi_session *session = conn->session;
1261  int age = 0, i = 0;
1262 
1263  if (itt == RESERVED_ITT)
1264  return 0;
1265 
1266  if (session->tt->parse_pdu_itt)
1267  session->tt->parse_pdu_itt(conn, itt, &i, &age);
1268  else {
1269  i = get_itt(itt);
1270  age = ((__force u32)itt >> ISCSI_AGE_SHIFT) & ISCSI_AGE_MASK;
1271  }
1272 
1273  if (age != session->age) {
1275  "received itt %x expected session age (%x)\n",
1276  (__force u32)itt, session->age);
1277  return ISCSI_ERR_BAD_ITT;
1278  }
1279 
1280  if (i >= session->cmds_max) {
1282  "received invalid itt index %u (max cmds "
1283  "%u.\n", i, session->cmds_max);
1284  return ISCSI_ERR_BAD_ITT;
1285  }
1286  return 0;
1287 }
1289 
1299 struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *conn, itt_t itt)
1300 {
1301  struct iscsi_task *task;
1302 
1303  if (iscsi_verify_itt(conn, itt))
1304  return NULL;
1305 
1306  task = iscsi_itt_to_task(conn, itt);
1307  if (!task || !task->sc)
1308  return NULL;
1309 
1310  if (task->sc->SCp.phase != conn->session->age) {
1312  "task's session age %d, expected %d\n",
1313  task->sc->SCp.phase, conn->session->age);
1314  return NULL;
1315  }
1316 
1317  return task;
1318 }
1320 
1322  enum iscsi_err err)
1323 {
1324  struct iscsi_conn *conn;
1325  struct device *dev;
1326 
1327  spin_lock_bh(&session->lock);
1328  conn = session->leadconn;
1329  if (session->state == ISCSI_STATE_TERMINATE || !conn) {
1330  spin_unlock_bh(&session->lock);
1331  return;
1332  }
1333 
1334  dev = get_device(&conn->cls_conn->dev);
1335  spin_unlock_bh(&session->lock);
1336  if (!dev)
1337  return;
1338  /*
1339  * if the host is being removed bypass the connection
1340  * recovery initialization because we are going to kill
1341  * the session.
1342  */
1343  if (err == ISCSI_ERR_INVALID_HOST)
1344  iscsi_conn_error_event(conn->cls_conn, err);
1345  else
1346  iscsi_conn_failure(conn, err);
1347  put_device(dev);
1348 }
1350 
1351 void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err)
1352 {
1353  struct iscsi_session *session = conn->session;
1354 
1355  spin_lock_bh(&session->lock);
1356  if (session->state == ISCSI_STATE_FAILED) {
1357  spin_unlock_bh(&session->lock);
1358  return;
1359  }
1360 
1361  if (conn->stop_stage == 0)
1362  session->state = ISCSI_STATE_FAILED;
1363  spin_unlock_bh(&session->lock);
1364 
1367  iscsi_conn_error_event(conn->cls_conn, err);
1368 }
1370 
1371 static int iscsi_check_cmdsn_window_closed(struct iscsi_conn *conn)
1372 {
1373  struct iscsi_session *session = conn->session;
1374 
1375  /*
1376  * Check for iSCSI window and take care of CmdSN wrap-around
1377  */
1378  if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) {
1379  ISCSI_DBG_SESSION(session, "iSCSI CmdSN closed. ExpCmdSn "
1380  "%u MaxCmdSN %u CmdSN %u/%u\n",
1381  session->exp_cmdsn, session->max_cmdsn,
1382  session->cmdsn, session->queued_cmdsn);
1383  return -ENOSPC;
1384  }
1385  return 0;
1386 }
1387 
1388 static int iscsi_xmit_task(struct iscsi_conn *conn)
1389 {
1390  struct iscsi_task *task = conn->task;
1391  int rc;
1392 
1393  if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx))
1394  return -ENODATA;
1395 
1396  __iscsi_get_task(task);
1397  spin_unlock_bh(&conn->session->lock);
1398  rc = conn->session->tt->xmit_task(task);
1399  spin_lock_bh(&conn->session->lock);
1400  if (!rc) {
1401  /* done with this task */
1402  task->last_xfer = jiffies;
1403  conn->task = NULL;
1404  }
1405  __iscsi_put_task(task);
1406  return rc;
1407 }
1408 
1417 void iscsi_requeue_task(struct iscsi_task *task)
1418 {
1419  struct iscsi_conn *conn = task->conn;
1420 
1421  /*
1422  * this may be on the requeue list already if the xmit_task callout
1423  * is handling the r2ts while we are adding new ones
1424  */
1425  if (list_empty(&task->running))
1426  list_add_tail(&task->running, &conn->requeue);
1427  iscsi_conn_queue_work(conn);
1428 }
1430 
1440 static int iscsi_data_xmit(struct iscsi_conn *conn)
1441 {
1442  struct iscsi_task *task;
1443  int rc = 0;
1444 
1445  spin_lock_bh(&conn->session->lock);
1446  if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) {
1447  ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n");
1448  spin_unlock_bh(&conn->session->lock);
1449  return -ENODATA;
1450  }
1451 
1452  if (conn->task) {
1453  rc = iscsi_xmit_task(conn);
1454  if (rc)
1455  goto done;
1456  }
1457 
1458  /*
1459  * process mgmt pdus like nops before commands since we should
1460  * only have one nop-out as a ping from us and targets should not
1461  * overflow us with nop-ins
1462  */
1463 check_mgmt:
1464  while (!list_empty(&conn->mgmtqueue)) {
1465  conn->task = list_entry(conn->mgmtqueue.next,
1466  struct iscsi_task, running);
1467  list_del_init(&conn->task->running);
1468  if (iscsi_prep_mgmt_task(conn, conn->task)) {
1469  __iscsi_put_task(conn->task);
1470  conn->task = NULL;
1471  continue;
1472  }
1473  rc = iscsi_xmit_task(conn);
1474  if (rc)
1475  goto done;
1476  }
1477 
1478  /* process pending command queue */
1479  while (!list_empty(&conn->cmdqueue)) {
1480  conn->task = list_entry(conn->cmdqueue.next, struct iscsi_task,
1481  running);
1482  list_del_init(&conn->task->running);
1483  if (conn->session->state == ISCSI_STATE_LOGGING_OUT) {
1484  fail_scsi_task(conn->task, DID_IMM_RETRY);
1485  continue;
1486  }
1487  rc = iscsi_prep_scsi_cmd_pdu(conn->task);
1488  if (rc) {
1489  if (rc == -ENOMEM || rc == -EACCES) {
1490  list_add_tail(&conn->task->running,
1491  &conn->cmdqueue);
1492  conn->task = NULL;
1493  goto done;
1494  } else
1495  fail_scsi_task(conn->task, DID_ABORT);
1496  continue;
1497  }
1498  rc = iscsi_xmit_task(conn);
1499  if (rc)
1500  goto done;
1501  /*
1502  * we could continuously get new task requests so
1503  * we need to check the mgmt queue for nops that need to
1504  * be sent to aviod starvation
1505  */
1506  if (!list_empty(&conn->mgmtqueue))
1507  goto check_mgmt;
1508  }
1509 
1510  while (!list_empty(&conn->requeue)) {
1511  /*
1512  * we always do fastlogout - conn stop code will clean up.
1513  */
1514  if (conn->session->state == ISCSI_STATE_LOGGING_OUT)
1515  break;
1516 
1517  task = list_entry(conn->requeue.next, struct iscsi_task,
1518  running);
1519  if (iscsi_check_tmf_restrictions(task, ISCSI_OP_SCSI_DATA_OUT))
1520  break;
1521 
1522  conn->task = task;
1523  list_del_init(&conn->task->running);
1524  conn->task->state = ISCSI_TASK_RUNNING;
1525  rc = iscsi_xmit_task(conn);
1526  if (rc)
1527  goto done;
1528  if (!list_empty(&conn->mgmtqueue))
1529  goto check_mgmt;
1530  }
1531  spin_unlock_bh(&conn->session->lock);
1532  return -ENODATA;
1533 
1534 done:
1535  spin_unlock_bh(&conn->session->lock);
1536  return rc;
1537 }
1538 
1539 static void iscsi_xmitworker(struct work_struct *work)
1540 {
1541  struct iscsi_conn *conn =
1542  container_of(work, struct iscsi_conn, xmitwork);
1543  int rc;
1544  /*
1545  * serialize Xmit worker on a per-connection basis.
1546  */
1547  do {
1548  rc = iscsi_data_xmit(conn);
1549  } while (rc >= 0 || rc == -EAGAIN);
1550 }
1551 
1552 static inline struct iscsi_task *iscsi_alloc_task(struct iscsi_conn *conn,
1553  struct scsi_cmnd *sc)
1554 {
1555  struct iscsi_task *task;
1556 
1557  if (!kfifo_out(&conn->session->cmdpool.queue,
1558  (void *) &task, sizeof(void *)))
1559  return NULL;
1560 
1561  sc->SCp.phase = conn->session->age;
1562  sc->SCp.ptr = (char *) task;
1563 
1564  atomic_set(&task->refcount, 1);
1565  task->state = ISCSI_TASK_PENDING;
1566  task->conn = conn;
1567  task->sc = sc;
1568  task->have_checked_conn = false;
1569  task->last_timeout = jiffies;
1570  task->last_xfer = jiffies;
1571  INIT_LIST_HEAD(&task->running);
1572  return task;
1573 }
1574 
1575 enum {
1586 };
1587 
1588 int iscsi_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc)
1589 {
1590  struct iscsi_cls_session *cls_session;
1591  struct iscsi_host *ihost;
1592  int reason = 0;
1593  struct iscsi_session *session;
1594  struct iscsi_conn *conn;
1595  struct iscsi_task *task = NULL;
1596 
1597  sc->result = 0;
1598  sc->SCp.ptr = NULL;
1599 
1600  ihost = shost_priv(host);
1601 
1602  cls_session = starget_to_session(scsi_target(sc->device));
1603  session = cls_session->dd_data;
1604  spin_lock_bh(&session->lock);
1605 
1606  reason = iscsi_session_chkready(cls_session);
1607  if (reason) {
1608  sc->result = reason;
1609  goto fault;
1610  }
1611 
1612  if (session->state != ISCSI_STATE_LOGGED_IN) {
1613  /*
1614  * to handle the race between when we set the recovery state
1615  * and block the session we requeue here (commands could
1616  * be entering our queuecommand while a block is starting
1617  * up because the block code is not locked)
1618  */
1619  switch (session->state) {
1620  case ISCSI_STATE_FAILED:
1622  reason = FAILURE_SESSION_IN_RECOVERY;
1623  sc->result = DID_IMM_RETRY << 16;
1624  break;
1626  reason = FAILURE_SESSION_LOGGING_OUT;
1627  sc->result = DID_IMM_RETRY << 16;
1628  break;
1631  sc->result = DID_TRANSPORT_FAILFAST << 16;
1632  break;
1633  case ISCSI_STATE_TERMINATE:
1634  reason = FAILURE_SESSION_TERMINATE;
1635  sc->result = DID_NO_CONNECT << 16;
1636  break;
1637  default:
1638  reason = FAILURE_SESSION_FREED;
1639  sc->result = DID_NO_CONNECT << 16;
1640  }
1641  goto fault;
1642  }
1643 
1644  conn = session->leadconn;
1645  if (!conn) {
1646  reason = FAILURE_SESSION_FREED;
1647  sc->result = DID_NO_CONNECT << 16;
1648  goto fault;
1649  }
1650 
1651  if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) {
1652  reason = FAILURE_SESSION_IN_RECOVERY;
1653  sc->result = DID_REQUEUE;
1654  goto fault;
1655  }
1656 
1657  if (iscsi_check_cmdsn_window_closed(conn)) {
1658  reason = FAILURE_WINDOW_CLOSED;
1659  goto reject;
1660  }
1661 
1662  task = iscsi_alloc_task(conn, sc);
1663  if (!task) {
1664  reason = FAILURE_OOM;
1665  goto reject;
1666  }
1667 
1668  if (!ihost->workq) {
1669  reason = iscsi_prep_scsi_cmd_pdu(task);
1670  if (reason) {
1671  if (reason == -ENOMEM || reason == -EACCES) {
1672  reason = FAILURE_OOM;
1673  goto prepd_reject;
1674  } else {
1675  sc->result = DID_ABORT << 16;
1676  goto prepd_fault;
1677  }
1678  }
1679  if (session->tt->xmit_task(task)) {
1680  session->cmdsn--;
1681  reason = FAILURE_SESSION_NOT_READY;
1682  goto prepd_reject;
1683  }
1684  } else {
1685  list_add_tail(&task->running, &conn->cmdqueue);
1686  iscsi_conn_queue_work(conn);
1687  }
1688 
1689  session->queued_cmdsn++;
1690  spin_unlock_bh(&session->lock);
1691  return 0;
1692 
1693 prepd_reject:
1694  iscsi_complete_task(task, ISCSI_TASK_REQUEUE_SCSIQ);
1695 reject:
1696  spin_unlock_bh(&session->lock);
1697  ISCSI_DBG_SESSION(session, "cmd 0x%x rejected (%d)\n",
1698  sc->cmnd[0], reason);
1699  return SCSI_MLQUEUE_TARGET_BUSY;
1700 
1701 prepd_fault:
1702  iscsi_complete_task(task, ISCSI_TASK_REQUEUE_SCSIQ);
1703 fault:
1704  spin_unlock_bh(&session->lock);
1705  ISCSI_DBG_SESSION(session, "iscsi: cmd 0x%x is not queued (%d)\n",
1706  sc->cmnd[0], reason);
1707  if (!scsi_bidi_cmnd(sc))
1708  scsi_set_resid(sc, scsi_bufflen(sc));
1709  else {
1710  scsi_out(sc)->resid = scsi_out(sc)->length;
1711  scsi_in(sc)->resid = scsi_in(sc)->length;
1712  }
1713  sc->scsi_done(sc);
1714  return 0;
1715 }
1717 
1719 {
1720  switch (reason) {
1721  case SCSI_QDEPTH_DEFAULT:
1722  scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth);
1723  break;
1724  case SCSI_QDEPTH_QFULL:
1725  scsi_track_queue_full(sdev, depth);
1726  break;
1727  case SCSI_QDEPTH_RAMP_UP:
1728  scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth);
1729  break;
1730  default:
1731  return -EOPNOTSUPP;
1732  }
1733  return sdev->queue_depth;
1734 }
1736 
1737 int iscsi_target_alloc(struct scsi_target *starget)
1738 {
1739  struct iscsi_cls_session *cls_session = starget_to_session(starget);
1740  struct iscsi_session *session = cls_session->dd_data;
1741 
1742  starget->can_queue = session->scsi_cmds_max;
1743  return 0;
1744 }
1746 
1747 static void iscsi_tmf_timedout(unsigned long data)
1748 {
1749  struct iscsi_conn *conn = (struct iscsi_conn *)data;
1750  struct iscsi_session *session = conn->session;
1751 
1752  spin_lock(&session->lock);
1753  if (conn->tmf_state == TMF_QUEUED) {
1754  conn->tmf_state = TMF_TIMEDOUT;
1755  ISCSI_DBG_EH(session, "tmf timedout\n");
1756  /* unblock eh_abort() */
1757  wake_up(&conn->ehwait);
1758  }
1759  spin_unlock(&session->lock);
1760 }
1761 
1762 static int iscsi_exec_task_mgmt_fn(struct iscsi_conn *conn,
1763  struct iscsi_tm *hdr, int age,
1764  int timeout)
1765 {
1766  struct iscsi_session *session = conn->session;
1767  struct iscsi_task *task;
1768 
1769  task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)hdr,
1770  NULL, 0);
1771  if (!task) {
1772  spin_unlock_bh(&session->lock);
1773  iscsi_conn_printk(KERN_ERR, conn, "Could not send TMF.\n");
1775  spin_lock_bh(&session->lock);
1776  return -EPERM;
1777  }
1778  conn->tmfcmd_pdus_cnt++;
1779  conn->tmf_timer.expires = timeout * HZ + jiffies;
1780  conn->tmf_timer.function = iscsi_tmf_timedout;
1781  conn->tmf_timer.data = (unsigned long)conn;
1782  add_timer(&conn->tmf_timer);
1783  ISCSI_DBG_EH(session, "tmf set timeout\n");
1784 
1785  spin_unlock_bh(&session->lock);
1786  mutex_unlock(&session->eh_mutex);
1787 
1788  /*
1789  * block eh thread until:
1790  *
1791  * 1) tmf response
1792  * 2) tmf timeout
1793  * 3) session is terminated or restarted or userspace has
1794  * given up on recovery
1795  */
1796  wait_event_interruptible(conn->ehwait, age != session->age ||
1797  session->state != ISCSI_STATE_LOGGED_IN ||
1798  conn->tmf_state != TMF_QUEUED);
1799  if (signal_pending(current))
1801  del_timer_sync(&conn->tmf_timer);
1802 
1803  mutex_lock(&session->eh_mutex);
1804  spin_lock_bh(&session->lock);
1805  /* if the session drops it will clean up the task */
1806  if (age != session->age ||
1807  session->state != ISCSI_STATE_LOGGED_IN)
1808  return -ENOTCONN;
1809  return 0;
1810 }
1811 
1812 /*
1813  * Fail commands. session lock held and recv side suspended and xmit
1814  * thread flushed
1815  */
1816 static void fail_scsi_tasks(struct iscsi_conn *conn, unsigned lun,
1817  int error)
1818 {
1819  struct iscsi_task *task;
1820  int i;
1821 
1822  for (i = 0; i < conn->session->cmds_max; i++) {
1823  task = conn->session->cmds[i];
1824  if (!task->sc || task->state == ISCSI_TASK_FREE)
1825  continue;
1826 
1827  if (lun != -1 && lun != task->sc->device->lun)
1828  continue;
1829 
1830  ISCSI_DBG_SESSION(conn->session,
1831  "failing sc %p itt 0x%x state %d\n",
1832  task->sc, task->itt, task->state);
1833  fail_scsi_task(task, error);
1834  }
1835 }
1836 
1849 {
1850  spin_lock_bh(&conn->session->lock);
1852  spin_unlock_bh(&conn->session->lock);
1853 }
1855 
1864 void iscsi_suspend_tx(struct iscsi_conn *conn)
1865 {
1866  struct Scsi_Host *shost = conn->session->host;
1867  struct iscsi_host *ihost = shost_priv(shost);
1868 
1870  if (ihost->workq)
1871  flush_workqueue(ihost->workq);
1872 }
1874 
1875 static void iscsi_start_tx(struct iscsi_conn *conn)
1876 {
1878  iscsi_conn_queue_work(conn);
1879 }
1880 
1881 /*
1882  * We want to make sure a ping is in flight. It has timed out.
1883  * And we are not busy processing a pdu that is making
1884  * progress but got started before the ping and is taking a while
1885  * to complete so the ping is just stuck behind it in a queue.
1886  */
1887 static int iscsi_has_ping_timed_out(struct iscsi_conn *conn)
1888 {
1889  if (conn->ping_task &&
1890  time_before_eq(conn->last_recv + (conn->recv_timeout * HZ) +
1891  (conn->ping_timeout * HZ), jiffies))
1892  return 1;
1893  else
1894  return 0;
1895 }
1896 
1897 static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
1898 {
1899  enum blk_eh_timer_return rc = BLK_EH_NOT_HANDLED;
1900  struct iscsi_task *task = NULL, *running_task;
1901  struct iscsi_cls_session *cls_session;
1902  struct iscsi_session *session;
1903  struct iscsi_conn *conn;
1904  int i;
1905 
1906  cls_session = starget_to_session(scsi_target(sc->device));
1907  session = cls_session->dd_data;
1908 
1909  ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
1910 
1911  spin_lock(&session->lock);
1912  task = (struct iscsi_task *)sc->SCp.ptr;
1913  if (!task) {
1914  /*
1915  * Raced with completion. Blk layer has taken ownership
1916  * so let timeout code complete it now.
1917  */
1918  rc = BLK_EH_HANDLED;
1919  goto done;
1920  }
1921 
1922  if (session->state != ISCSI_STATE_LOGGED_IN) {
1923  /*
1924  * We are probably in the middle of iscsi recovery so let
1925  * that complete and handle the error.
1926  */
1927  rc = BLK_EH_RESET_TIMER;
1928  goto done;
1929  }
1930 
1931  conn = session->leadconn;
1932  if (!conn) {
1933  /* In the middle of shuting down */
1934  rc = BLK_EH_RESET_TIMER;
1935  goto done;
1936  }
1937 
1938  /*
1939  * If we have sent (at least queued to the network layer) a pdu or
1940  * recvd one for the task since the last timeout ask for
1941  * more time. If on the next timeout we have not made progress
1942  * we can check if it is the task or connection when we send the
1943  * nop as a ping.
1944  */
1945  if (time_after(task->last_xfer, task->last_timeout)) {
1946  ISCSI_DBG_EH(session, "Command making progress. Asking "
1947  "scsi-ml for more time to complete. "
1948  "Last data xfer at %lu. Last timeout was at "
1949  "%lu\n.", task->last_xfer, task->last_timeout);
1950  task->have_checked_conn = false;
1951  rc = BLK_EH_RESET_TIMER;
1952  goto done;
1953  }
1954 
1955  if (!conn->recv_timeout && !conn->ping_timeout)
1956  goto done;
1957  /*
1958  * if the ping timedout then we are in the middle of cleaning up
1959  * and can let the iscsi eh handle it
1960  */
1961  if (iscsi_has_ping_timed_out(conn)) {
1962  rc = BLK_EH_RESET_TIMER;
1963  goto done;
1964  }
1965 
1966  for (i = 0; i < conn->session->cmds_max; i++) {
1967  running_task = conn->session->cmds[i];
1968  if (!running_task->sc || running_task == task ||
1969  running_task->state != ISCSI_TASK_RUNNING)
1970  continue;
1971 
1972  /*
1973  * Only check if cmds started before this one have made
1974  * progress, or this could never fail
1975  */
1976  if (time_after(running_task->sc->jiffies_at_alloc,
1977  task->sc->jiffies_at_alloc))
1978  continue;
1979 
1980  if (time_after(running_task->last_xfer, task->last_timeout)) {
1981  /*
1982  * This task has not made progress, but a task
1983  * started before us has transferred data since
1984  * we started/last-checked. We could be queueing
1985  * too many tasks or the LU is bad.
1986  *
1987  * If the device is bad the cmds ahead of us on
1988  * other devs will complete, and this loop will
1989  * eventually fail starting the scsi eh.
1990  */
1991  ISCSI_DBG_EH(session, "Command has not made progress "
1992  "but commands ahead of it have. "
1993  "Asking scsi-ml for more time to "
1994  "complete. Our last xfer vs running task "
1995  "last xfer %lu/%lu. Last check %lu.\n",
1996  task->last_xfer, running_task->last_xfer,
1997  task->last_timeout);
1998  rc = BLK_EH_RESET_TIMER;
1999  goto done;
2000  }
2001  }
2002 
2003  /* Assumes nop timeout is shorter than scsi cmd timeout */
2004  if (task->have_checked_conn)
2005  goto done;
2006 
2007  /*
2008  * Checking the transport already or nop from a cmd timeout still
2009  * running
2010  */
2011  if (conn->ping_task) {
2012  task->have_checked_conn = true;
2013  rc = BLK_EH_RESET_TIMER;
2014  goto done;
2015  }
2016 
2017  /* Make sure there is a transport check done */
2018  iscsi_send_nopout(conn, NULL);
2019  task->have_checked_conn = true;
2020  rc = BLK_EH_RESET_TIMER;
2021 
2022 done:
2023  if (task)
2024  task->last_timeout = jiffies;
2025  spin_unlock(&session->lock);
2026  ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ?
2027  "timer reset" : "nh");
2028  return rc;
2029 }
2030 
2031 static void iscsi_check_transport_timeouts(unsigned long data)
2032 {
2033  struct iscsi_conn *conn = (struct iscsi_conn *)data;
2034  struct iscsi_session *session = conn->session;
2035  unsigned long recv_timeout, next_timeout = 0, last_recv;
2036 
2037  spin_lock(&session->lock);
2038  if (session->state != ISCSI_STATE_LOGGED_IN)
2039  goto done;
2040 
2041  recv_timeout = conn->recv_timeout;
2042  if (!recv_timeout)
2043  goto done;
2044 
2045  recv_timeout *= HZ;
2046  last_recv = conn->last_recv;
2047 
2048  if (iscsi_has_ping_timed_out(conn)) {
2049  iscsi_conn_printk(KERN_ERR, conn, "ping timeout of %d secs "
2050  "expired, recv timeout %d, last rx %lu, "
2051  "last ping %lu, now %lu\n",
2052  conn->ping_timeout, conn->recv_timeout,
2053  last_recv, conn->last_ping, jiffies);
2054  spin_unlock(&session->lock);
2056  return;
2057  }
2058 
2059  if (time_before_eq(last_recv + recv_timeout, jiffies)) {
2060  /* send a ping to try to provoke some traffic */
2061  ISCSI_DBG_CONN(conn, "Sending nopout as ping\n");
2062  iscsi_send_nopout(conn, NULL);
2063  next_timeout = conn->last_ping + (conn->ping_timeout * HZ);
2064  } else
2065  next_timeout = last_recv + recv_timeout;
2066 
2067  ISCSI_DBG_CONN(conn, "Setting next tmo %lu\n", next_timeout);
2068  mod_timer(&conn->transport_timer, next_timeout);
2069 done:
2070  spin_unlock(&session->lock);
2071 }
2072 
2073 static void iscsi_prep_abort_task_pdu(struct iscsi_task *task,
2074  struct iscsi_tm *hdr)
2075 {
2076  memset(hdr, 0, sizeof(*hdr));
2079  hdr->flags |= ISCSI_FLAG_CMD_FINAL;
2080  hdr->lun = task->lun;
2081  hdr->rtt = task->hdr_itt;
2082  hdr->refcmdsn = task->cmdsn;
2083 }
2084 
2085 int iscsi_eh_abort(struct scsi_cmnd *sc)
2086 {
2087  struct iscsi_cls_session *cls_session;
2088  struct iscsi_session *session;
2089  struct iscsi_conn *conn;
2090  struct iscsi_task *task;
2091  struct iscsi_tm *hdr;
2092  int rc, age;
2093 
2094  cls_session = starget_to_session(scsi_target(sc->device));
2095  session = cls_session->dd_data;
2096 
2097  ISCSI_DBG_EH(session, "aborting sc %p\n", sc);
2098 
2099  mutex_lock(&session->eh_mutex);
2100  spin_lock_bh(&session->lock);
2101  /*
2102  * if session was ISCSI_STATE_IN_RECOVERY then we may not have
2103  * got the command.
2104  */
2105  if (!sc->SCp.ptr) {
2106  ISCSI_DBG_EH(session, "sc never reached iscsi layer or "
2107  "it completed.\n");
2108  spin_unlock_bh(&session->lock);
2109  mutex_unlock(&session->eh_mutex);
2110  return SUCCESS;
2111  }
2112 
2113  /*
2114  * If we are not logged in or we have started a new session
2115  * then let the host reset code handle this
2116  */
2117  if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN ||
2118  sc->SCp.phase != session->age) {
2119  spin_unlock_bh(&session->lock);
2120  mutex_unlock(&session->eh_mutex);
2121  ISCSI_DBG_EH(session, "failing abort due to dropped "
2122  "session.\n");
2123  return FAILED;
2124  }
2125 
2126  conn = session->leadconn;
2127  conn->eh_abort_cnt++;
2128  age = session->age;
2129 
2130  task = (struct iscsi_task *)sc->SCp.ptr;
2131  ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n",
2132  sc, task->itt);
2133 
2134  /* task completed before time out */
2135  if (!task->sc) {
2136  ISCSI_DBG_EH(session, "sc completed while abort in progress\n");
2137  goto success;
2138  }
2139 
2140  if (task->state == ISCSI_TASK_PENDING) {
2141  fail_scsi_task(task, DID_ABORT);
2142  goto success;
2143  }
2144 
2145  /* only have one tmf outstanding at a time */
2146  if (conn->tmf_state != TMF_INITIAL)
2147  goto failed;
2148  conn->tmf_state = TMF_QUEUED;
2149 
2150  hdr = &conn->tmhdr;
2151  iscsi_prep_abort_task_pdu(task, hdr);
2152 
2153  if (iscsi_exec_task_mgmt_fn(conn, hdr, age, session->abort_timeout)) {
2154  rc = FAILED;
2155  goto failed;
2156  }
2157 
2158  switch (conn->tmf_state) {
2159  case TMF_SUCCESS:
2160  spin_unlock_bh(&session->lock);
2161  /*
2162  * stop tx side incase the target had sent a abort rsp but
2163  * the initiator was still writing out data.
2164  */
2165  iscsi_suspend_tx(conn);
2166  /*
2167  * we do not stop the recv side because targets have been
2168  * good and have never sent us a successful tmf response
2169  * then sent more data for the cmd.
2170  */
2171  spin_lock_bh(&session->lock);
2172  fail_scsi_task(task, DID_ABORT);
2173  conn->tmf_state = TMF_INITIAL;
2174  memset(hdr, 0, sizeof(*hdr));
2175  spin_unlock_bh(&session->lock);
2176  iscsi_start_tx(conn);
2177  goto success_unlocked;
2178  case TMF_TIMEDOUT:
2179  spin_unlock_bh(&session->lock);
2181  goto failed_unlocked;
2182  case TMF_NOT_FOUND:
2183  if (!sc->SCp.ptr) {
2184  conn->tmf_state = TMF_INITIAL;
2185  memset(hdr, 0, sizeof(*hdr));
2186  /* task completed before tmf abort response */
2187  ISCSI_DBG_EH(session, "sc completed while abort in "
2188  "progress\n");
2189  goto success;
2190  }
2191  /* fall through */
2192  default:
2193  conn->tmf_state = TMF_INITIAL;
2194  goto failed;
2195  }
2196 
2197 success:
2198  spin_unlock_bh(&session->lock);
2199 success_unlocked:
2200  ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n",
2201  sc, task->itt);
2202  mutex_unlock(&session->eh_mutex);
2203  return SUCCESS;
2204 
2205 failed:
2206  spin_unlock_bh(&session->lock);
2207 failed_unlocked:
2208  ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc,
2209  task ? task->itt : 0);
2210  mutex_unlock(&session->eh_mutex);
2211  return FAILED;
2212 }
2214 
2215 static void iscsi_prep_lun_reset_pdu(struct scsi_cmnd *sc, struct iscsi_tm *hdr)
2216 {
2217  memset(hdr, 0, sizeof(*hdr));
2220  hdr->flags |= ISCSI_FLAG_CMD_FINAL;
2221  int_to_scsilun(sc->device->lun, &hdr->lun);
2222  hdr->rtt = RESERVED_ITT;
2223 }
2224 
2226 {
2227  struct iscsi_cls_session *cls_session;
2228  struct iscsi_session *session;
2229  struct iscsi_conn *conn;
2230  struct iscsi_tm *hdr;
2231  int rc = FAILED;
2232 
2233  cls_session = starget_to_session(scsi_target(sc->device));
2234  session = cls_session->dd_data;
2235 
2236  ISCSI_DBG_EH(session, "LU Reset [sc %p lun %u]\n", sc, sc->device->lun);
2237 
2238  mutex_lock(&session->eh_mutex);
2239  spin_lock_bh(&session->lock);
2240  /*
2241  * Just check if we are not logged in. We cannot check for
2242  * the phase because the reset could come from a ioctl.
2243  */
2244  if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2245  goto unlock;
2246  conn = session->leadconn;
2247 
2248  /* only have one tmf outstanding at a time */
2249  if (conn->tmf_state != TMF_INITIAL)
2250  goto unlock;
2251  conn->tmf_state = TMF_QUEUED;
2252 
2253  hdr = &conn->tmhdr;
2254  iscsi_prep_lun_reset_pdu(sc, hdr);
2255 
2256  if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2257  session->lu_reset_timeout)) {
2258  rc = FAILED;
2259  goto unlock;
2260  }
2261 
2262  switch (conn->tmf_state) {
2263  case TMF_SUCCESS:
2264  break;
2265  case TMF_TIMEDOUT:
2266  spin_unlock_bh(&session->lock);
2268  goto done;
2269  default:
2270  conn->tmf_state = TMF_INITIAL;
2271  goto unlock;
2272  }
2273 
2274  rc = SUCCESS;
2275  spin_unlock_bh(&session->lock);
2276 
2277  iscsi_suspend_tx(conn);
2278 
2279  spin_lock_bh(&session->lock);
2280  memset(hdr, 0, sizeof(*hdr));
2281  fail_scsi_tasks(conn, sc->device->lun, DID_ERROR);
2282  conn->tmf_state = TMF_INITIAL;
2283  spin_unlock_bh(&session->lock);
2284 
2285  iscsi_start_tx(conn);
2286  goto done;
2287 
2288 unlock:
2289  spin_unlock_bh(&session->lock);
2290 done:
2291  ISCSI_DBG_EH(session, "dev reset result = %s\n",
2292  rc == SUCCESS ? "SUCCESS" : "FAILED");
2293  mutex_unlock(&session->eh_mutex);
2294  return rc;
2295 }
2297 
2299 {
2300  struct iscsi_session *session = cls_session->dd_data;
2301 
2302  spin_lock_bh(&session->lock);
2303  if (session->state != ISCSI_STATE_LOGGED_IN) {
2305  if (session->leadconn)
2306  wake_up(&session->leadconn->ehwait);
2307  }
2308  spin_unlock_bh(&session->lock);
2309 }
2311 
2320 {
2321  struct iscsi_cls_session *cls_session;
2322  struct iscsi_session *session;
2323  struct iscsi_conn *conn;
2324 
2325  cls_session = starget_to_session(scsi_target(sc->device));
2326  session = cls_session->dd_data;
2327  conn = session->leadconn;
2328 
2329  mutex_lock(&session->eh_mutex);
2330  spin_lock_bh(&session->lock);
2331  if (session->state == ISCSI_STATE_TERMINATE) {
2332 failed:
2333  ISCSI_DBG_EH(session,
2334  "failing session reset: Could not log back into "
2335  "%s, %s [age %d]\n", session->targetname,
2336  conn->persistent_address, session->age);
2337  spin_unlock_bh(&session->lock);
2338  mutex_unlock(&session->eh_mutex);
2339  return FAILED;
2340  }
2341 
2342  spin_unlock_bh(&session->lock);
2343  mutex_unlock(&session->eh_mutex);
2344  /*
2345  * we drop the lock here but the leadconn cannot be destoyed while
2346  * we are in the scsi eh
2347  */
2349 
2350  ISCSI_DBG_EH(session, "wait for relogin\n");
2352  session->state == ISCSI_STATE_TERMINATE ||
2353  session->state == ISCSI_STATE_LOGGED_IN ||
2354  session->state == ISCSI_STATE_RECOVERY_FAILED);
2355  if (signal_pending(current))
2357 
2358  mutex_lock(&session->eh_mutex);
2359  spin_lock_bh(&session->lock);
2360  if (session->state == ISCSI_STATE_LOGGED_IN) {
2361  ISCSI_DBG_EH(session,
2362  "session reset succeeded for %s,%s\n",
2363  session->targetname, conn->persistent_address);
2364  } else
2365  goto failed;
2366  spin_unlock_bh(&session->lock);
2367  mutex_unlock(&session->eh_mutex);
2368  return SUCCESS;
2369 }
2371 
2372 static void iscsi_prep_tgt_reset_pdu(struct scsi_cmnd *sc, struct iscsi_tm *hdr)
2373 {
2374  memset(hdr, 0, sizeof(*hdr));
2377  hdr->flags |= ISCSI_FLAG_CMD_FINAL;
2378  hdr->rtt = RESERVED_ITT;
2379 }
2380 
2388 {
2389  struct iscsi_cls_session *cls_session;
2390  struct iscsi_session *session;
2391  struct iscsi_conn *conn;
2392  struct iscsi_tm *hdr;
2393  int rc = FAILED;
2394 
2395  cls_session = starget_to_session(scsi_target(sc->device));
2396  session = cls_session->dd_data;
2397 
2398  ISCSI_DBG_EH(session, "tgt Reset [sc %p tgt %s]\n", sc,
2399  session->targetname);
2400 
2401  mutex_lock(&session->eh_mutex);
2402  spin_lock_bh(&session->lock);
2403  /*
2404  * Just check if we are not logged in. We cannot check for
2405  * the phase because the reset could come from a ioctl.
2406  */
2407  if (!session->leadconn || session->state != ISCSI_STATE_LOGGED_IN)
2408  goto unlock;
2409  conn = session->leadconn;
2410 
2411  /* only have one tmf outstanding at a time */
2412  if (conn->tmf_state != TMF_INITIAL)
2413  goto unlock;
2414  conn->tmf_state = TMF_QUEUED;
2415 
2416  hdr = &conn->tmhdr;
2417  iscsi_prep_tgt_reset_pdu(sc, hdr);
2418 
2419  if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
2420  session->tgt_reset_timeout)) {
2421  rc = FAILED;
2422  goto unlock;
2423  }
2424 
2425  switch (conn->tmf_state) {
2426  case TMF_SUCCESS:
2427  break;
2428  case TMF_TIMEDOUT:
2429  spin_unlock_bh(&session->lock);
2431  goto done;
2432  default:
2433  conn->tmf_state = TMF_INITIAL;
2434  goto unlock;
2435  }
2436 
2437  rc = SUCCESS;
2438  spin_unlock_bh(&session->lock);
2439 
2440  iscsi_suspend_tx(conn);
2441 
2442  spin_lock_bh(&session->lock);
2443  memset(hdr, 0, sizeof(*hdr));
2444  fail_scsi_tasks(conn, -1, DID_ERROR);
2445  conn->tmf_state = TMF_INITIAL;
2446  spin_unlock_bh(&session->lock);
2447 
2448  iscsi_start_tx(conn);
2449  goto done;
2450 
2451 unlock:
2452  spin_unlock_bh(&session->lock);
2453 done:
2454  ISCSI_DBG_EH(session, "tgt %s reset result = %s\n", session->targetname,
2455  rc == SUCCESS ? "SUCCESS" : "FAILED");
2456  mutex_unlock(&session->eh_mutex);
2457  return rc;
2458 }
2460 
2469 {
2470  int rc;
2471 
2472  rc = iscsi_eh_target_reset(sc);
2473  if (rc == FAILED)
2474  rc = iscsi_eh_session_reset(sc);
2475  return rc;
2476 }
2478 
2479 /*
2480  * Pre-allocate a pool of @max items of @item_size. By default, the pool
2481  * should be accessed via kfifo_{get,put} on q->queue.
2482  * Optionally, the caller can obtain the array of object pointers
2483  * by passing in a non-NULL @items pointer
2484  */
2485 int
2486 iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size)
2487 {
2488  int i, num_arrays = 1;
2489 
2490  memset(q, 0, sizeof(*q));
2491 
2492  q->max = max;
2493 
2494  /* If the user passed an items pointer, he wants a copy of
2495  * the array. */
2496  if (items)
2497  num_arrays++;
2498  q->pool = kzalloc(num_arrays * max * sizeof(void*), GFP_KERNEL);
2499  if (q->pool == NULL)
2500  return -ENOMEM;
2501 
2502  kfifo_init(&q->queue, (void*)q->pool, max * sizeof(void*));
2503 
2504  for (i = 0; i < max; i++) {
2505  q->pool[i] = kzalloc(item_size, GFP_KERNEL);
2506  if (q->pool[i] == NULL) {
2507  q->max = i;
2508  goto enomem;
2509  }
2510  kfifo_in(&q->queue, (void*)&q->pool[i], sizeof(void*));
2511  }
2512 
2513  if (items) {
2514  *items = q->pool + max;
2515  memcpy(*items, q->pool, max * sizeof(void *));
2516  }
2517 
2518  return 0;
2519 
2520 enomem:
2521  iscsi_pool_free(q);
2522  return -ENOMEM;
2523 }
2525 
2527 {
2528  int i;
2529 
2530  for (i = 0; i < q->max; i++)
2531  kfree(q->pool[i]);
2532  kfree(q->pool);
2533 }
2535 
2544 int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev)
2545 {
2546  if (!shost->can_queue)
2548 
2549  if (!shost->cmd_per_lun)
2551 
2552  if (!shost->transportt->eh_timed_out)
2553  shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out;
2554  return scsi_add_host(shost, pdev);
2555 }
2557 
2568  int dd_data_size, bool xmit_can_sleep)
2569 {
2570  struct Scsi_Host *shost;
2571  struct iscsi_host *ihost;
2572 
2573  shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size);
2574  if (!shost)
2575  return NULL;
2576  ihost = shost_priv(shost);
2577 
2578  if (xmit_can_sleep) {
2579  snprintf(ihost->workq_name, sizeof(ihost->workq_name),
2580  "iscsi_q_%d", shost->host_no);
2582  if (!ihost->workq)
2583  goto free_host;
2584  }
2585 
2586  spin_lock_init(&ihost->lock);
2587  ihost->state = ISCSI_HOST_SETUP;
2588  ihost->num_sessions = 0;
2590  return shost;
2591 
2592 free_host:
2593  scsi_host_put(shost);
2594  return NULL;
2595 }
2597 
2598 static void iscsi_notify_host_removed(struct iscsi_cls_session *cls_session)
2599 {
2601 }
2602 
2611 {
2612  struct iscsi_host *ihost = shost_priv(shost);
2613  unsigned long flags;
2614 
2615  spin_lock_irqsave(&ihost->lock, flags);
2616  ihost->state = ISCSI_HOST_REMOVED;
2617  spin_unlock_irqrestore(&ihost->lock, flags);
2618 
2619  iscsi_host_for_each_session(shost, iscsi_notify_host_removed);
2621  ihost->num_sessions == 0);
2622  if (signal_pending(current))
2624 
2625  scsi_remove_host(shost);
2626  if (ihost->workq)
2627  destroy_workqueue(ihost->workq);
2628 }
2630 
2632 {
2633  struct iscsi_host *ihost = shost_priv(shost);
2634 
2635  kfree(ihost->netdev);
2636  kfree(ihost->hwaddress);
2637  kfree(ihost->initiatorname);
2638  scsi_host_put(shost);
2639 }
2641 
2642 static void iscsi_host_dec_session_cnt(struct Scsi_Host *shost)
2643 {
2644  struct iscsi_host *ihost = shost_priv(shost);
2645  unsigned long flags;
2646 
2647  shost = scsi_host_get(shost);
2648  if (!shost) {
2649  printk(KERN_ERR "Invalid state. Cannot notify host removal "
2650  "of session teardown event because host already "
2651  "removed.\n");
2652  return;
2653  }
2654 
2655  spin_lock_irqsave(&ihost->lock, flags);
2656  ihost->num_sessions--;
2657  if (ihost->num_sessions == 0)
2658  wake_up(&ihost->session_removal_wq);
2659  spin_unlock_irqrestore(&ihost->lock, flags);
2660  scsi_host_put(shost);
2661 }
2662 
2678 struct iscsi_cls_session *
2679 iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
2680  uint16_t cmds_max, int dd_size, int cmd_task_size,
2681  uint32_t initial_cmdsn, unsigned int id)
2682 {
2683  struct iscsi_host *ihost = shost_priv(shost);
2684  struct iscsi_session *session;
2685  struct iscsi_cls_session *cls_session;
2686  int cmd_i, scsi_cmds, total_cmds = cmds_max;
2687  unsigned long flags;
2688 
2689  spin_lock_irqsave(&ihost->lock, flags);
2690  if (ihost->state == ISCSI_HOST_REMOVED) {
2691  spin_unlock_irqrestore(&ihost->lock, flags);
2692  return NULL;
2693  }
2694  ihost->num_sessions++;
2695  spin_unlock_irqrestore(&ihost->lock, flags);
2696 
2697  if (!total_cmds)
2698  total_cmds = ISCSI_DEF_XMIT_CMDS_MAX;
2699  /*
2700  * The iscsi layer needs some tasks for nop handling and tmfs,
2701  * so the cmds_max must at least be greater than ISCSI_MGMT_CMDS_MAX
2702  * + 1 command for scsi IO.
2703  */
2704  if (total_cmds < ISCSI_TOTAL_CMDS_MIN) {
2705  printk(KERN_ERR "iscsi: invalid can_queue of %d. can_queue "
2706  "must be a power of two that is at least %d.\n",
2707  total_cmds, ISCSI_TOTAL_CMDS_MIN);
2708  goto dec_session_count;
2709  }
2710 
2711  if (total_cmds > ISCSI_TOTAL_CMDS_MAX) {
2712  printk(KERN_ERR "iscsi: invalid can_queue of %d. can_queue "
2713  "must be a power of 2 less than or equal to %d.\n",
2714  cmds_max, ISCSI_TOTAL_CMDS_MAX);
2715  total_cmds = ISCSI_TOTAL_CMDS_MAX;
2716  }
2717 
2718  if (!is_power_of_2(total_cmds)) {
2719  printk(KERN_ERR "iscsi: invalid can_queue of %d. can_queue "
2720  "must be a power of 2.\n", total_cmds);
2721  total_cmds = rounddown_pow_of_two(total_cmds);
2722  if (total_cmds < ISCSI_TOTAL_CMDS_MIN)
2723  return NULL;
2724  printk(KERN_INFO "iscsi: Rounding can_queue to %d.\n",
2725  total_cmds);
2726  }
2727  scsi_cmds = total_cmds - ISCSI_MGMT_CMDS_MAX;
2728 
2729  cls_session = iscsi_alloc_session(shost, iscsit,
2730  sizeof(struct iscsi_session) +
2731  dd_size);
2732  if (!cls_session)
2733  goto dec_session_count;
2734  session = cls_session->dd_data;
2735  session->cls_session = cls_session;
2736  session->host = shost;
2737  session->state = ISCSI_STATE_FREE;
2738  session->fast_abort = 1;
2739  session->tgt_reset_timeout = 30;
2740  session->lu_reset_timeout = 15;
2741  session->abort_timeout = 10;
2742  session->scsi_cmds_max = scsi_cmds;
2743  session->cmds_max = total_cmds;
2744  session->queued_cmdsn = session->cmdsn = initial_cmdsn;
2745  session->exp_cmdsn = initial_cmdsn + 1;
2746  session->max_cmdsn = initial_cmdsn + 1;
2747  session->max_r2t = 1;
2748  session->tt = iscsit;
2749  session->dd_data = cls_session->dd_data + sizeof(*session);
2750  mutex_init(&session->eh_mutex);
2751  spin_lock_init(&session->lock);
2752 
2753  /* initialize SCSI PDU commands pool */
2754  if (iscsi_pool_init(&session->cmdpool, session->cmds_max,
2755  (void***)&session->cmds,
2756  cmd_task_size + sizeof(struct iscsi_task)))
2757  goto cmdpool_alloc_fail;
2758 
2759  /* pre-format cmds pool with ITT */
2760  for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
2761  struct iscsi_task *task = session->cmds[cmd_i];
2762 
2763  if (cmd_task_size)
2764  task->dd_data = &task[1];
2765  task->itt = cmd_i;
2766  task->state = ISCSI_TASK_FREE;
2767  INIT_LIST_HEAD(&task->running);
2768  }
2769 
2770  if (!try_module_get(iscsit->owner))
2771  goto module_get_fail;
2772 
2773  if (iscsi_add_session(cls_session, id))
2774  goto cls_session_fail;
2775 
2776  return cls_session;
2777 
2778 cls_session_fail:
2779  module_put(iscsit->owner);
2780 module_get_fail:
2781  iscsi_pool_free(&session->cmdpool);
2782 cmdpool_alloc_fail:
2783  iscsi_free_session(cls_session);
2784 dec_session_count:
2785  iscsi_host_dec_session_cnt(shost);
2786  return NULL;
2787 }
2789 
2798 {
2799  struct iscsi_session *session = cls_session->dd_data;
2800  struct module *owner = cls_session->transport->owner;
2801  struct Scsi_Host *shost = session->host;
2802 
2803  iscsi_pool_free(&session->cmdpool);
2804 
2805  kfree(session->password);
2806  kfree(session->password_in);
2807  kfree(session->username);
2808  kfree(session->username_in);
2809  kfree(session->targetname);
2810  kfree(session->targetalias);
2811  kfree(session->initiatorname);
2812  kfree(session->ifacename);
2813 
2814  iscsi_destroy_session(cls_session);
2815  iscsi_host_dec_session_cnt(shost);
2816  module_put(owner);
2817 }
2819 
2826 struct iscsi_cls_conn *
2827 iscsi_conn_setup(struct iscsi_cls_session *cls_session, int dd_size,
2828  uint32_t conn_idx)
2829 {
2830  struct iscsi_session *session = cls_session->dd_data;
2831  struct iscsi_conn *conn;
2832  struct iscsi_cls_conn *cls_conn;
2833  char *data;
2834 
2835  cls_conn = iscsi_create_conn(cls_session, sizeof(*conn) + dd_size,
2836  conn_idx);
2837  if (!cls_conn)
2838  return NULL;
2839  conn = cls_conn->dd_data;
2840  memset(conn, 0, sizeof(*conn) + dd_size);
2841 
2842  conn->dd_data = cls_conn->dd_data + sizeof(*conn);
2843  conn->session = session;
2844  conn->cls_conn = cls_conn;
2846  conn->id = conn_idx;
2847  conn->exp_statsn = 0;
2848  conn->tmf_state = TMF_INITIAL;
2849 
2850  init_timer(&conn->transport_timer);
2851  conn->transport_timer.data = (unsigned long)conn;
2852  conn->transport_timer.function = iscsi_check_transport_timeouts;
2853 
2854  INIT_LIST_HEAD(&conn->mgmtqueue);
2855  INIT_LIST_HEAD(&conn->cmdqueue);
2856  INIT_LIST_HEAD(&conn->requeue);
2857  INIT_WORK(&conn->xmitwork, iscsi_xmitworker);
2858 
2859  /* allocate login_task used for the login/text sequences */
2860  spin_lock_bh(&session->lock);
2861  if (!kfifo_out(&session->cmdpool.queue,
2862  (void*)&conn->login_task,
2863  sizeof(void*))) {
2864  spin_unlock_bh(&session->lock);
2865  goto login_task_alloc_fail;
2866  }
2867  spin_unlock_bh(&session->lock);
2868 
2869  data = (char *) __get_free_pages(GFP_KERNEL,
2871  if (!data)
2872  goto login_task_data_alloc_fail;
2873  conn->login_task->data = conn->data = data;
2874 
2875  init_timer(&conn->tmf_timer);
2876  init_waitqueue_head(&conn->ehwait);
2877 
2878  return cls_conn;
2879 
2880 login_task_data_alloc_fail:
2881  kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
2882  sizeof(void*));
2883 login_task_alloc_fail:
2884  iscsi_destroy_conn(cls_conn);
2885  return NULL;
2886 }
2888 
2896 void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
2897 {
2898  struct iscsi_conn *conn = cls_conn->dd_data;
2899  struct iscsi_session *session = conn->session;
2900  unsigned long flags;
2901 
2903 
2904  spin_lock_bh(&session->lock);
2906  if (session->leadconn == conn) {
2907  /*
2908  * leading connection? then give up on recovery.
2909  */
2910  session->state = ISCSI_STATE_TERMINATE;
2911  wake_up(&conn->ehwait);
2912  }
2913  spin_unlock_bh(&session->lock);
2914 
2915  /*
2916  * Block until all in-progress commands for this connection
2917  * time out or fail.
2918  */
2919  for (;;) {
2920  spin_lock_irqsave(session->host->host_lock, flags);
2921  if (!session->host->host_busy) { /* OK for ERL == 0 */
2922  spin_unlock_irqrestore(session->host->host_lock, flags);
2923  break;
2924  }
2925  spin_unlock_irqrestore(session->host->host_lock, flags);
2926  msleep_interruptible(500);
2927  iscsi_conn_printk(KERN_INFO, conn, "iscsi conn_destroy(): "
2928  "host_busy %d host_failed %d\n",
2929  session->host->host_busy,
2930  session->host->host_failed);
2931  /*
2932  * force eh_abort() to unblock
2933  */
2934  wake_up(&conn->ehwait);
2935  }
2936 
2937  /* flush queued up work because we free the connection below */
2938  iscsi_suspend_tx(conn);
2939 
2940  spin_lock_bh(&session->lock);
2941  free_pages((unsigned long) conn->data,
2943  kfree(conn->persistent_address);
2944  kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
2945  sizeof(void*));
2946  if (session->leadconn == conn)
2947  session->leadconn = NULL;
2948  spin_unlock_bh(&session->lock);
2949 
2950  iscsi_destroy_conn(cls_conn);
2951 }
2953 
2954 int iscsi_conn_start(struct iscsi_cls_conn *cls_conn)
2955 {
2956  struct iscsi_conn *conn = cls_conn->dd_data;
2957  struct iscsi_session *session = conn->session;
2958 
2959  if (!session) {
2961  "can't start unbound connection\n");
2962  return -EPERM;
2963  }
2964 
2965  if ((session->imm_data_en || !session->initial_r2t_en) &&
2966  session->first_burst > session->max_burst) {
2967  iscsi_conn_printk(KERN_INFO, conn, "invalid burst lengths: "
2968  "first_burst %d max_burst %d\n",
2969  session->first_burst, session->max_burst);
2970  return -EINVAL;
2971  }
2972 
2973  if (conn->ping_timeout && !conn->recv_timeout) {
2974  iscsi_conn_printk(KERN_ERR, conn, "invalid recv timeout of "
2975  "zero. Using 5 seconds\n.");
2976  conn->recv_timeout = 5;
2977  }
2978 
2979  if (conn->recv_timeout && !conn->ping_timeout) {
2980  iscsi_conn_printk(KERN_ERR, conn, "invalid ping timeout of "
2981  "zero. Using 5 seconds.\n");
2982  conn->ping_timeout = 5;
2983  }
2984 
2985  spin_lock_bh(&session->lock);
2986  conn->c_stage = ISCSI_CONN_STARTED;
2987  session->state = ISCSI_STATE_LOGGED_IN;
2988  session->queued_cmdsn = session->cmdsn;
2989 
2990  conn->last_recv = jiffies;
2991  conn->last_ping = jiffies;
2992  if (conn->recv_timeout && conn->ping_timeout)
2993  mod_timer(&conn->transport_timer,
2994  jiffies + (conn->recv_timeout * HZ));
2995 
2996  switch(conn->stop_stage) {
2997  case STOP_CONN_RECOVER:
2998  /*
2999  * unblock eh_abort() if it is blocked. re-try all
3000  * commands after successful recovery
3001  */
3002  conn->stop_stage = 0;
3003  conn->tmf_state = TMF_INITIAL;
3004  session->age++;
3005  if (session->age == 16)
3006  session->age = 0;
3007  break;
3008  case STOP_CONN_TERM:
3009  conn->stop_stage = 0;
3010  break;
3011  default:
3012  break;
3013  }
3014  spin_unlock_bh(&session->lock);
3015 
3017  wake_up(&conn->ehwait);
3018  return 0;
3019 }
3021 
3022 static void
3023 fail_mgmt_tasks(struct iscsi_session *session, struct iscsi_conn *conn)
3024 {
3025  struct iscsi_task *task;
3026  int i, state;
3027 
3028  for (i = 0; i < conn->session->cmds_max; i++) {
3029  task = conn->session->cmds[i];
3030  if (task->sc)
3031  continue;
3032 
3033  if (task->state == ISCSI_TASK_FREE)
3034  continue;
3035 
3036  ISCSI_DBG_SESSION(conn->session,
3037  "failing mgmt itt 0x%x state %d\n",
3038  task->itt, task->state);
3040  if (task->state == ISCSI_TASK_PENDING)
3041  state = ISCSI_TASK_COMPLETED;
3042  iscsi_complete_task(task, state);
3043 
3044  }
3045 }
3046 
3047 static void iscsi_start_session_recovery(struct iscsi_session *session,
3048  struct iscsi_conn *conn, int flag)
3049 {
3050  int old_stop_stage;
3051 
3052  mutex_lock(&session->eh_mutex);
3053  spin_lock_bh(&session->lock);
3054  if (conn->stop_stage == STOP_CONN_TERM) {
3055  spin_unlock_bh(&session->lock);
3056  mutex_unlock(&session->eh_mutex);
3057  return;
3058  }
3059 
3060  /*
3061  * When this is called for the in_login state, we only want to clean
3062  * up the login task and connection. We do not need to block and set
3063  * the recovery state again
3064  */
3065  if (flag == STOP_CONN_TERM)
3066  session->state = ISCSI_STATE_TERMINATE;
3067  else if (conn->stop_stage != STOP_CONN_RECOVER)
3068  session->state = ISCSI_STATE_IN_RECOVERY;
3069 
3070  old_stop_stage = conn->stop_stage;
3071  conn->stop_stage = flag;
3072  spin_unlock_bh(&session->lock);
3073 
3075  iscsi_suspend_tx(conn);
3076 
3077  spin_lock_bh(&session->lock);
3078  conn->c_stage = ISCSI_CONN_STOPPED;
3079  spin_unlock_bh(&session->lock);
3080 
3081  /*
3082  * for connection level recovery we should not calculate
3083  * header digest. conn->hdr_size used for optimization
3084  * in hdr_extract() and will be re-negotiated at
3085  * set_param() time.
3086  */
3087  if (flag == STOP_CONN_RECOVER) {
3088  conn->hdrdgst_en = 0;
3089  conn->datadgst_en = 0;
3090  if (session->state == ISCSI_STATE_IN_RECOVERY &&
3091  old_stop_stage != STOP_CONN_RECOVER) {
3092  ISCSI_DBG_SESSION(session, "blocking session\n");
3093  iscsi_block_session(session->cls_session);
3094  }
3095  }
3096 
3097  /*
3098  * flush queues.
3099  */
3100  spin_lock_bh(&session->lock);
3101  fail_scsi_tasks(conn, -1, DID_TRANSPORT_DISRUPTED);
3102  fail_mgmt_tasks(session, conn);
3103  memset(&conn->tmhdr, 0, sizeof(conn->tmhdr));
3104  spin_unlock_bh(&session->lock);
3105  mutex_unlock(&session->eh_mutex);
3106 }
3107 
3108 void iscsi_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
3109 {
3110  struct iscsi_conn *conn = cls_conn->dd_data;
3111  struct iscsi_session *session = conn->session;
3112 
3113  switch (flag) {
3114  case STOP_CONN_RECOVER:
3115  case STOP_CONN_TERM:
3116  iscsi_start_session_recovery(session, conn, flag);
3117  break;
3118  default:
3120  "invalid stop flag %d\n", flag);
3121  }
3122 }
3124 
3125 int iscsi_conn_bind(struct iscsi_cls_session *cls_session,
3126  struct iscsi_cls_conn *cls_conn, int is_leading)
3127 {
3128  struct iscsi_session *session = cls_session->dd_data;
3129  struct iscsi_conn *conn = cls_conn->dd_data;
3130 
3131  spin_lock_bh(&session->lock);
3132  if (is_leading)
3133  session->leadconn = conn;
3134  spin_unlock_bh(&session->lock);
3135 
3136  /*
3137  * Unblock xmitworker(), Login Phase will pass through.
3138  */
3141  return 0;
3142 }
3144 
3145 static int iscsi_switch_str_param(char **param, char *new_val_buf)
3146 {
3147  char *new_val;
3148 
3149  if (*param) {
3150  if (!strcmp(*param, new_val_buf))
3151  return 0;
3152  }
3153 
3154  new_val = kstrdup(new_val_buf, GFP_NOIO);
3155  if (!new_val)
3156  return -ENOMEM;
3157 
3158  kfree(*param);
3159  *param = new_val;
3160  return 0;
3161 }
3162 
3164  enum iscsi_param param, char *buf, int buflen)
3165 {
3166  struct iscsi_conn *conn = cls_conn->dd_data;
3167  struct iscsi_session *session = conn->session;
3168 
3169  switch(param) {
3171  sscanf(buf, "%d", &session->fast_abort);
3172  break;
3173  case ISCSI_PARAM_ABORT_TMO:
3174  sscanf(buf, "%d", &session->abort_timeout);
3175  break;
3177  sscanf(buf, "%d", &session->lu_reset_timeout);
3178  break;
3180  sscanf(buf, "%d", &session->tgt_reset_timeout);
3181  break;
3182  case ISCSI_PARAM_PING_TMO:
3183  sscanf(buf, "%d", &conn->ping_timeout);
3184  break;
3185  case ISCSI_PARAM_RECV_TMO:
3186  sscanf(buf, "%d", &conn->recv_timeout);
3187  break;
3189  sscanf(buf, "%d", &conn->max_recv_dlength);
3190  break;
3192  sscanf(buf, "%d", &conn->max_xmit_dlength);
3193  break;
3195  sscanf(buf, "%d", &conn->hdrdgst_en);
3196  break;
3198  sscanf(buf, "%d", &conn->datadgst_en);
3199  break;
3201  sscanf(buf, "%d", &session->initial_r2t_en);
3202  break;
3203  case ISCSI_PARAM_MAX_R2T:
3204  sscanf(buf, "%hu", &session->max_r2t);
3205  break;
3207  sscanf(buf, "%d", &session->imm_data_en);
3208  break;
3210  sscanf(buf, "%d", &session->first_burst);
3211  break;
3212  case ISCSI_PARAM_MAX_BURST:
3213  sscanf(buf, "%d", &session->max_burst);
3214  break;
3216  sscanf(buf, "%d", &session->pdu_inorder_en);
3217  break;
3219  sscanf(buf, "%d", &session->dataseq_inorder_en);
3220  break;
3221  case ISCSI_PARAM_ERL:
3222  sscanf(buf, "%d", &session->erl);
3223  break;
3225  sscanf(buf, "%u", &conn->exp_statsn);
3226  break;
3227  case ISCSI_PARAM_USERNAME:
3228  return iscsi_switch_str_param(&session->username, buf);
3230  return iscsi_switch_str_param(&session->username_in, buf);
3231  case ISCSI_PARAM_PASSWORD:
3232  return iscsi_switch_str_param(&session->password, buf);
3234  return iscsi_switch_str_param(&session->password_in, buf);
3236  return iscsi_switch_str_param(&session->targetname, buf);
3238  return iscsi_switch_str_param(&session->targetalias, buf);
3239  case ISCSI_PARAM_TPGT:
3240  sscanf(buf, "%d", &session->tpgt);
3241  break;
3243  sscanf(buf, "%d", &conn->persistent_port);
3244  break;
3246  return iscsi_switch_str_param(&conn->persistent_address, buf);
3248  return iscsi_switch_str_param(&session->ifacename, buf);
3250  return iscsi_switch_str_param(&session->initiatorname, buf);
3251  default:
3252  return -ENOSYS;
3253  }
3254 
3255  return 0;
3256 }
3258 
3260  enum iscsi_param param, char *buf)
3261 {
3262  struct iscsi_session *session = cls_session->dd_data;
3263  int len;
3264 
3265  switch(param) {
3267  len = sprintf(buf, "%d\n", session->fast_abort);
3268  break;
3269  case ISCSI_PARAM_ABORT_TMO:
3270  len = sprintf(buf, "%d\n", session->abort_timeout);
3271  break;
3273  len = sprintf(buf, "%d\n", session->lu_reset_timeout);
3274  break;
3276  len = sprintf(buf, "%d\n", session->tgt_reset_timeout);
3277  break;
3279  len = sprintf(buf, "%d\n", session->initial_r2t_en);
3280  break;
3281  case ISCSI_PARAM_MAX_R2T:
3282  len = sprintf(buf, "%hu\n", session->max_r2t);
3283  break;
3285  len = sprintf(buf, "%d\n", session->imm_data_en);
3286  break;
3288  len = sprintf(buf, "%u\n", session->first_burst);
3289  break;
3290  case ISCSI_PARAM_MAX_BURST:
3291  len = sprintf(buf, "%u\n", session->max_burst);
3292  break;
3294  len = sprintf(buf, "%d\n", session->pdu_inorder_en);
3295  break;
3297  len = sprintf(buf, "%d\n", session->dataseq_inorder_en);
3298  break;
3299  case ISCSI_PARAM_ERL:
3300  len = sprintf(buf, "%d\n", session->erl);
3301  break;
3303  len = sprintf(buf, "%s\n", session->targetname);
3304  break;
3306  len = sprintf(buf, "%s\n", session->targetalias);
3307  break;
3308  case ISCSI_PARAM_TPGT:
3309  len = sprintf(buf, "%d\n", session->tpgt);
3310  break;
3311  case ISCSI_PARAM_USERNAME:
3312  len = sprintf(buf, "%s\n", session->username);
3313  break;
3315  len = sprintf(buf, "%s\n", session->username_in);
3316  break;
3317  case ISCSI_PARAM_PASSWORD:
3318  len = sprintf(buf, "%s\n", session->password);
3319  break;
3321  len = sprintf(buf, "%s\n", session->password_in);
3322  break;
3324  len = sprintf(buf, "%s\n", session->ifacename);
3325  break;
3327  len = sprintf(buf, "%s\n", session->initiatorname);
3328  break;
3329  default:
3330  return -ENOSYS;
3331  }
3332 
3333  return len;
3334 }
3336 
3338  enum iscsi_param param, char *buf)
3339 {
3340  struct sockaddr_in6 *sin6 = NULL;
3341  struct sockaddr_in *sin = NULL;
3342  int len;
3343 
3344  switch (addr->ss_family) {
3345  case AF_INET:
3346  sin = (struct sockaddr_in *)addr;
3347  break;
3348  case AF_INET6:
3349  sin6 = (struct sockaddr_in6 *)addr;
3350  break;
3351  default:
3352  return -EINVAL;
3353  }
3354 
3355  switch (param) {
3358  if (sin)
3359  len = sprintf(buf, "%pI4\n", &sin->sin_addr.s_addr);
3360  else
3361  len = sprintf(buf, "%pI6\n", &sin6->sin6_addr);
3362  break;
3363  case ISCSI_PARAM_CONN_PORT:
3364  if (sin)
3365  len = sprintf(buf, "%hu\n", be16_to_cpu(sin->sin_port));
3366  else
3367  len = sprintf(buf, "%hu\n",
3368  be16_to_cpu(sin6->sin6_port));
3369  break;
3370  default:
3371  return -EINVAL;
3372  }
3373 
3374  return len;
3375 }
3377 
3379  enum iscsi_param param, char *buf)
3380 {
3381  struct iscsi_conn *conn = cls_conn->dd_data;
3382  int len;
3383 
3384  switch(param) {
3385  case ISCSI_PARAM_PING_TMO:
3386  len = sprintf(buf, "%u\n", conn->ping_timeout);
3387  break;
3388  case ISCSI_PARAM_RECV_TMO:
3389  len = sprintf(buf, "%u\n", conn->recv_timeout);
3390  break;
3392  len = sprintf(buf, "%u\n", conn->max_recv_dlength);
3393  break;
3395  len = sprintf(buf, "%u\n", conn->max_xmit_dlength);
3396  break;
3398  len = sprintf(buf, "%d\n", conn->hdrdgst_en);
3399  break;
3401  len = sprintf(buf, "%d\n", conn->datadgst_en);
3402  break;
3404  len = sprintf(buf, "%d\n", conn->ifmarker_en);
3405  break;
3407  len = sprintf(buf, "%d\n", conn->ofmarker_en);
3408  break;
3410  len = sprintf(buf, "%u\n", conn->exp_statsn);
3411  break;
3413  len = sprintf(buf, "%d\n", conn->persistent_port);
3414  break;
3416  len = sprintf(buf, "%s\n", conn->persistent_address);
3417  break;
3418  default:
3419  return -ENOSYS;
3420  }
3421 
3422  return len;
3423 }
3425 
3426 int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
3427  char *buf)
3428 {
3429  struct iscsi_host *ihost = shost_priv(shost);
3430  int len;
3431 
3432  switch (param) {
3434  len = sprintf(buf, "%s\n", ihost->netdev);
3435  break;
3437  len = sprintf(buf, "%s\n", ihost->hwaddress);
3438  break;
3440  len = sprintf(buf, "%s\n", ihost->initiatorname);
3441  break;
3442  default:
3443  return -ENOSYS;
3444  }
3445 
3446  return len;
3447 }
3449 
3450 int iscsi_host_set_param(struct Scsi_Host *shost, enum iscsi_host_param param,
3451  char *buf, int buflen)
3452 {
3453  struct iscsi_host *ihost = shost_priv(shost);
3454 
3455  switch (param) {
3457  return iscsi_switch_str_param(&ihost->netdev, buf);
3459  return iscsi_switch_str_param(&ihost->hwaddress, buf);
3461  return iscsi_switch_str_param(&ihost->initiatorname, buf);
3462  default:
3463  return -ENOSYS;
3464  }
3465 
3466  return 0;
3467 }
3469 
3470 MODULE_AUTHOR("Mike Christie");
3471 MODULE_DESCRIPTION("iSCSI library functions");
3472 MODULE_LICENSE("GPL");