Print this page
NEX-17502 Slow crash dumps, significantly slower than live core
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-14025 mr_sas needs to support ses devices
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
SUP-924 lockd: Cannot establish NLM service over <file desc. 9, protocol udp>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
NEX-3121 mr_sas performance issues on all-SSD configurations
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
re #13556, rb4474 LSI Skinny MegaRAID support for mr_sas(7D)
Update mr_sas from illumos-gate (default test)
re #11944 rb3746 need workaround for QEMU bug that induces bad e1000g checksums
re #11242 rb3560 LSI 2208 and 3108 support for mr_sas

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/mr_sas/mr_sas_tbolt.c
          +++ new/usr/src/uts/common/io/mr_sas/mr_sas_tbolt.c
↓ open down ↓ 8 lines elided ↑ open up ↑
   9    9   * Version:
  10   10   * Author:
  11   11   *              Swaminathan K S
  12   12   *              Arun Chandrashekhar
  13   13   *              Manju R
  14   14   *              Rasheed
  15   15   *              Shakeel Bukhari
  16   16   */
  17   17  
  18   18  /*
  19      - * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
       19 + * Copyright 2018 Nexenta Systems, Inc.
  20   20   * Copyright 2015, 2017 Citrus IT Limited. All rights reserved.
  21   21   * Copyright 2015 Garrett D'Amore <garrett@damore.org>
  22   22   */
  23   23  
  24   24  
  25   25  #include <sys/types.h>
  26   26  #include <sys/file.h>
  27   27  #include <sys/atomic.h>
  28   28  #include <sys/scsi/scsi.h>
  29   29  #include <sys/byteorder.h>
↓ open down ↓ 1071 lines elided ↑ open up ↑
1101 1101          int i;
1102 1102          uint32_t wait_time = dump_io_wait_time;
1103 1103          for (i = 0; i < wait_time; i++) {
1104 1104                  /*
1105 1105                   * Check For Outstanding poll Commands
1106 1106                   * except ldsync command and aen command
1107 1107                   */
1108 1108                  if (instance->fw_outstanding <= 2) {
1109 1109                          break;
1110 1110                  }
1111      -                drv_usecwait(10*MILLISEC);
     1111 +                drv_usecwait(MILLISEC);
1112 1112                  /* complete commands from reply queue */
1113 1113                  (void) mr_sas_tbolt_process_outstanding_cmd(instance);
1114 1114          }
1115 1115          if (instance->fw_outstanding > 2) {
1116 1116                  return (1);
1117 1117          }
1118 1118          return (0);
1119 1119  }
1120 1120  /*
1121 1121   * scsi_pkt handling
↓ open down ↓ 1254 lines elided ↑ open up ↑
2376 2376                          if (acmd->cmd_dmacount != 0) {
2377 2377                                  bp_mapin(acmd->cmd_buf);
2378 2378                                  inq = (struct scsi_inquiry *)
2379 2379                                      acmd->cmd_buf->b_un.b_addr;
2380 2380  
2381 2381                                  /* don't expose physical drives to OS */
2382 2382                                  if (acmd->islogical &&
2383 2383                                      (status == MFI_STAT_OK)) {
2384 2384                                          display_scsi_inquiry((caddr_t)inq);
2385 2385                                  } else if ((status == MFI_STAT_OK) &&
2386      -                                    inq->inq_dtype == DTYPE_DIRECT) {
     2386 +                                    (inq->inq_dtype == DTYPE_DIRECT ||
     2387 +                                    inq->inq_dtype == DTYPE_ESI)) {
2387 2388                                          display_scsi_inquiry((caddr_t)inq);
2388 2389                                  } else {
2389 2390                                          /* for physical disk */
2390 2391                                          status = MFI_STAT_DEVICE_NOT_FOUND;
2391 2392                                  }
2392 2393                          }
2393 2394                  }
2394 2395  
2395 2396                  switch (status) {
2396 2397                  case MFI_STAT_OK:
↓ open down ↓ 1155 lines elided ↑ open up ↑
3552 3553                          return (NDI_FAILURE);
3553 3554                  }
3554 3555                  return (NDI_SUCCESS);
3555 3556          }
3556 3557  
3557 3558          pds = (struct mrsas_tbolt_pd_info *)
3558 3559              kmem_zalloc(sizeof (struct mrsas_tbolt_pd_info), KM_SLEEP);
3559 3560          mrsas_tbolt_get_pd_info(instance, pds, tgt);
3560 3561          dtype = pds->scsiDevType;
3561 3562  
3562      -        /* Check for Disk */
3563      -        if ((dtype == DTYPE_DIRECT)) {
     3563 +        /* Check for disk/enclosure */
     3564 +        if (dtype == DTYPE_DIRECT || dtype == DTYPE_ESI) {
3564 3565                  if ((dtype == DTYPE_DIRECT) &&
3565 3566                      (LE_16(pds->fwState) != PD_SYSTEM)) {
3566 3567                          kmem_free(pds, sizeof (struct mrsas_tbolt_pd_info));
3567 3568                          return (NDI_FAILURE);
3568 3569                  }
3569 3570                  sd = kmem_zalloc(sizeof (struct scsi_device), KM_SLEEP);
3570 3571                  sd->sd_address.a_hba_tran = instance->tran;
3571 3572                  sd->sd_address.a_target = (uint16_t)tgt;
3572 3573                  sd->sd_address.a_lun = (uint8_t)lun;
3573 3574  
↓ open down ↓ 104 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX