Print this page
9693 emulated NVMe controller on ESXi 6.7 fails to attach
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/nvme/nvme.c
          +++ new/usr/src/uts/common/io/nvme/nvme.c
↓ open down ↓ 75 lines elided ↑ open up ↑
  76   76   * turned off while dumping the driver will just submit a command in the regular
  77   77   * way, and then repeatedly attempt a command retrieval until it gets the
  78   78   * command back.
  79   79   *
  80   80   *
  81   81   * Namespace Support:
  82   82   *
  83   83   * NVMe devices can have multiple namespaces, each being a independent data
  84   84   * store. The driver supports multiple namespaces and creates a blkdev interface
  85   85   * for each namespace found. Namespaces can have various attributes to support
  86      - * thin provisioning and protection information. This driver does not support
  87      - * any of this and ignores namespaces that have these attributes.
       86 + * protection information. This driver does not support any of this and ignores
       87 + * namespaces that have these attributes.
  88   88   *
  89   89   * As of NVMe 1.1 namespaces can have an 64bit Extended Unique Identifier
  90   90   * (EUI64). This driver uses the EUI64 if present to generate the devid and
  91   91   * passes it to blkdev to use it in the device node names. As this is currently
  92   92   * untested namespaces with EUI64 are ignored by default.
  93   93   *
  94   94   * We currently support only (2 << NVME_MINOR_INST_SHIFT) - 2 namespaces in a
  95   95   * single controller. This is an artificial limit imposed by the driver to be
  96   96   * able to address a reasonable number of controllers and namespaces using a
  97   97   * 32bit minor node number.
↓ open down ↓ 2118 lines elided ↑ open up ↑
2216 2216                  last_rp = idns->id_lbaf[j].lbaf_rp;
2217 2217                  ns->ns_best_block_size =
2218 2218                      1 << idns->id_lbaf[j].lbaf_lbads;
2219 2219          }
2220 2220  
2221 2221          if (ns->ns_best_block_size < nvme->n_min_block_size)
2222 2222                  ns->ns_best_block_size = nvme->n_min_block_size;
2223 2223  
2224 2224          /*
2225 2225           * We currently don't support namespaces that use either:
2226      -         * - thin provisioning
2227 2226           * - protection information
2228 2227           * - illegal block size (< 512)
2229 2228           */
2230      -        if (idns->id_nsfeat.f_thin ||
2231      -            idns->id_dps.dp_pinfo) {
     2229 +        if (idns->id_dps.dp_pinfo) {
2232 2230                  dev_err(nvme->n_dip, CE_WARN,
2233      -                    "!ignoring namespace %d, unsupported features: "
2234      -                    "thin = %d, pinfo = %d", nsid,
2235      -                    idns->id_nsfeat.f_thin, idns->id_dps.dp_pinfo);
     2231 +                    "!ignoring namespace %d, unsupported feature: "
     2232 +                    "pinfo = %d", nsid, idns->id_dps.dp_pinfo);
2236 2233                  ns->ns_ignore = B_TRUE;
2237 2234          } else if (ns->ns_block_size < 512) {
2238 2235                  dev_err(nvme->n_dip, CE_WARN,
2239 2236                      "!ignoring namespace %d, unsupported block size %"PRIu64,
2240 2237                      nsid, (uint64_t)ns->ns_block_size);
2241 2238                  ns->ns_ignore = B_TRUE;
2242 2239          } else {
2243 2240                  ns->ns_ignore = B_FALSE;
2244 2241          }
2245 2242  
↓ open down ↓ 1721 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX