Print this page
7351 NVMe driver sporadically lost track of completed I/O request, which
leads to zpool hanging and machine panic.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/nvme/nvme_var.h
          +++ new/usr/src/uts/common/io/nvme/nvme_var.h
↓ open down ↓ 90 lines elided ↑ open up ↑
  91   91          uint_t nq_cqhead;
  92   92          uint_t nq_cqtail;
  93   93          uintptr_t nq_cqhdbl;
  94   94  
  95   95          nvme_cmd_t **nq_cmd;
  96   96          uint16_t nq_next_cmd;
  97   97          uint_t nq_active_cmds;
  98   98          int nq_phase;
  99   99  
 100  100          kmutex_t nq_mutex;
      101 +        hrtime_t nq_ts;
      102 +        list_node_t nq_list_node;
      103 +        nvme_t *nq_nvme;
 101  104  };
 102  105  
 103  106  struct nvme {
 104  107          dev_info_t *n_dip;
 105  108          int n_progress;
 106  109  
 107  110          caddr_t n_regs;
 108  111          ddi_acc_handle_t n_regh;
 109  112  
 110  113          kmem_cache_t *n_cmd_cache;
 111  114  
 112  115          size_t n_inth_sz;
 113  116          ddi_intr_handle_t *n_inth;
 114  117          int n_intr_cnt;
 115  118          uint_t n_intr_pri;
 116  119          int n_intr_cap;
 117  120          int n_intr_type;
 118  121          int n_intr_types;
      122 +        int n_intr_timeouts;
 119  123  
 120  124          char *n_product;
 121  125          char *n_vendor;
 122  126  
 123  127          boolean_t n_dead;
 124  128          boolean_t n_strict_version;
 125  129          boolean_t n_ignore_unknown_vendor_status;
 126  130          uint32_t n_admin_queue_len;
 127  131          uint32_t n_io_queue_len;
 128  132          uint16_t n_async_event_limit;
↓ open down ↓ 114 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX