Print this page
NEX-3414 CLONE - Port 3339 iscsi/fs:5 causes panic on initiator
NEX-3419 CLONE - Run multi initiator sessions to a single target test can panic the initiator
Reviewed by: Steve Peng <steve.peng@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/scsi/adapters/iscsi/iscsi.c
          +++ new/usr/src/uts/common/io/scsi/adapters/iscsi/iscsi.c
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2000 by Cisco Systems, Inc.  All rights reserved.
  23   23   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
       24 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  24   25   *
  25   26   * iSCSI Software Initiator
  26   27   */
  27   28  
  28   29  /*
  29   30   * Framework interface routines for iSCSI
  30   31   */
  31   32  
  32   33  #include "iscsi.h"                              /* main header */
  33   34  #include <sys/iscsi_protocol.h> /* protocol structs */
↓ open down ↓ 811 lines elided ↑ open up ↑
 845  846                  pkt = scsi_hba_pkt_alloc(ilp->lun_sess->sess_hba->hba_dip,
 846  847                      ap, cmdlen, statuslen, tgtlen, sizeof (iscsi_cmd_t),
 847  848                      callback, arg);
 848  849                  if (pkt == NULL) {
 849  850                          return (NULL);
 850  851                  }
 851  852                  icmdp = (iscsi_cmd_t *)pkt->pkt_ha_private;
 852  853                  icmdp->cmd_sig                  = ISCSI_SIG_CMD;
 853  854                  icmdp->cmd_state                = ISCSI_CMD_STATE_FREE;
 854  855                  icmdp->cmd_lun                  = ilp;
      856 +                iscsi_lun_hold(ilp);
 855  857                  icmdp->cmd_type                 = ISCSI_CMD_TYPE_SCSI;
 856  858                  /* add the report lun addressing type on to the lun */
 857  859                  icmdp->cmd_un.scsi.lun          = ilp->lun_addr_type << 14;
 858  860                  icmdp->cmd_un.scsi.lun          = icmdp->cmd_un.scsi.lun |
 859  861                      ilp->lun_num;
 860  862                  icmdp->cmd_un.scsi.pkt          = pkt;
 861  863                  icmdp->cmd_un.scsi.bp           = bp;
 862  864                  icmdp->cmd_un.scsi.cmdlen       = cmdlen;
 863  865                  icmdp->cmd_un.scsi.statuslen    = statuslen;
 864  866                  icmdp->cmd_crc_error_seen       = B_FALSE;
↓ open down ↓ 223 lines elided ↑ open up ↑
1088 1090  iscsi_tran_destroy_pkt(struct scsi_address *ap, struct scsi_pkt *pkt)
1089 1091  {
1090 1092          iscsi_cmd_t     *icmdp;
1091 1093  
1092 1094          icmdp = (iscsi_cmd_t *)pkt->pkt_ha_private;
1093 1095  
1094 1096          ASSERT(icmdp != NULL);
1095 1097          ASSERT(icmdp->cmd_sig == ISCSI_SIG_CMD);
1096 1098          ASSERT(icmdp->cmd_state == ISCSI_CMD_STATE_FREE);
1097 1099  
     1100 +        iscsi_lun_rele(icmdp->cmd_lun);
1098 1101          mutex_destroy(&icmdp->cmd_mutex);
1099 1102          cv_destroy(&icmdp->cmd_completion);
1100 1103          scsi_hba_pkt_free(ap, pkt);
1101 1104  }
1102 1105  
1103 1106  /*
1104 1107   * iscsi_tran_dmafree - This is a software driver, NO DMA
1105 1108   */
1106 1109  /* ARGSUSED */
1107 1110  static void
↓ open down ↓ 4454 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX