Index: sys/cam/nvme/nvme_all.c =================================================================== --- sys/cam/nvme/nvme_all.c +++ sys/cam/nvme/nvme_all.c @@ -91,11 +91,14 @@ { sbuf_printf(sb, "<"); - cam_strvis_sbuf(sb, cdata->mn, sizeof(cdata->mn), 0); + cam_strvis_sbuf(sb, cdata->mn, sizeof(cdata->mn), + CAM_STRVIS_FLAG_NONASCII_SPC); sbuf_printf(sb, " "); - cam_strvis_sbuf(sb, cdata->fr, sizeof(cdata->fr), 0); + cam_strvis_sbuf(sb, cdata->fr, sizeof(cdata->fr), + CAM_STRVIS_FLAG_NONASCII_SPC); sbuf_printf(sb, " "); - cam_strvis_sbuf(sb, cdata->sn, sizeof(cdata->sn), 0); + cam_strvis_sbuf(sb, cdata->sn, sizeof(cdata->sn), + CAM_STRVIS_FLAG_NONASCII_SPC); sbuf_printf(sb, ">\n"); } Index: sys/cam/nvme/nvme_da.c =================================================================== --- sys/cam/nvme/nvme_da.c +++ sys/cam/nvme/nvme_da.c @@ -844,6 +844,7 @@ const struct nvme_controller_data *cd; char announce_buf[80]; uint8_t flbas_fmt, lbads, vwc_present; + struct sbuf sb; u_int maxio; int quirks; @@ -930,10 +931,16 @@ * d_ident and d_descr are both far bigger than the length of either * the serial or model number strings. */ - cam_strvis(disk->d_descr, cd->mn, - NVME_MODEL_NUMBER_LENGTH, sizeof(disk->d_descr)); - cam_strvis(disk->d_ident, cd->sn, - NVME_SERIAL_NUMBER_LENGTH, sizeof(disk->d_ident)); + sbuf_new(&sb, disk->d_descr, sizeof(disk->d_descr), SBUF_FIXEDLEN); + cam_strvis_sbuf(&sb, cd->mn, NVME_MODEL_NUMBER_LENGTH, + CAM_STRVIS_FLAG_NONASCII_SPC); + sbuf_finish(&sb); + + sbuf_new(&sb, disk->d_ident, sizeof(disk->d_ident), SBUF_FIXEDLEN); + cam_strvis_sbuf(&sb, cd->sn, NVME_SERIAL_NUMBER_LENGTH, + CAM_STRVIS_FLAG_NONASCII_SPC); + sbuf_finish(&sb); + disk->d_hba_vendor = cpi.hba_vendor; disk->d_hba_device = cpi.hba_device; disk->d_hba_subvendor = cpi.hba_subvendor; Index: sys/cam/nvme/nvme_xpt.c =================================================================== --- sys/cam/nvme/nvme_xpt.c +++ sys/cam/nvme/nvme_xpt.c @@ -352,7 +352,9 @@ if (softc->restart) goto done; switch (softc->action) { - case NVME_PROBE_IDENTIFY_CD: + case NVME_PROBE_IDENTIFY_CD: { + struct sbuf sb; + nvme_controller_data_swapbytes(&softc->cd); nvme_cdata = path->device->nvme_cdata; @@ -376,8 +378,13 @@ path->device->serial_num = (u_int8_t *) malloc(NVME_SERIAL_NUMBER_LENGTH + 1, M_CAMXPT, M_NOWAIT); if (path->device->serial_num != NULL) { - cam_strvis(path->device->serial_num, nvme_cdata->sn, - NVME_SERIAL_NUMBER_LENGTH, NVME_SERIAL_NUMBER_LENGTH + 1); + sbuf_new(&sb, path->device->serial_num, + NVME_SERIAL_NUMBER_LENGTH + 1, SBUF_FIXEDLEN); + cam_strvis_sbuf(&sb, nvme_cdata->sn, + sizeof(nvme_cdata->sn), + CAM_STRVIS_FLAG_NONASCII_SPC); + sbuf_finish(&sb); + path->device->serial_num_len = strlen(path->device->serial_num); } @@ -388,6 +395,7 @@ xpt_release_ccb(done_ccb); xpt_schedule(periph, priority); goto out; + } case NVME_PROBE_IDENTIFY_NS: nvme_namespace_data_swapbytes(&softc->ns);