From bbd508cae9e12e3e265b08641b3f9f415f1da6bc Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Tue, 27 Jun 2017 20:24:44 +0000 Subject: [PATCH] Report some aspects of namespaces and namespace support in identify command. Sponsored by: Netflix Submitted by: Matt Williams (via D11330) --- sbin/nvmecontrol/identify.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/sbin/nvmecontrol/identify.c b/sbin/nvmecontrol/identify.c index 58492e2fd956..c7da98e4acb6 100644 --- a/sbin/nvmecontrol/identify.c +++ b/sbin/nvmecontrol/identify.c @@ -44,6 +44,7 @@ static void print_controller(struct nvme_controller_data *cdata) { uint8_t str[128]; + char cbuf[UINT128_DIG + 1]; printf("Controller Capabilities/Features\n"); printf("================================\n"); @@ -65,8 +66,8 @@ print_controller(struct nvme_controller_data *cdata) printf("Unlimited\n"); else printf("%d\n", PAGE_SIZE * (1 << cdata->mdts)); - printf("\n"); + printf("\n"); printf("Admin Command Set Attributes\n"); printf("============================\n"); printf("Security Send/Receive: %s\n", @@ -75,6 +76,8 @@ print_controller(struct nvme_controller_data *cdata) cdata->oacs.format ? "Supported" : "Not Supported"); printf("Firmware Activate/Download: %s\n", cdata->oacs.firmware ? "Supported" : "Not Supported"); + printf("Namespace Managment: %s\n", + cdata->oacs.nsmgmt ? "Supported" : "Not Supported"); printf("Abort Command Limit: %d\n", cdata->acl+1); printf("Async Event Request Limit: %d\n", cdata->aerl+1); printf("Number of Firmware Slots: "); @@ -91,8 +94,8 @@ print_controller(struct nvme_controller_data *cdata) cdata->lpa.ns_smart ? "Yes" : "No"); printf("Error Log Page Entries: %d\n", cdata->elpe+1); printf("Number of Power States: %d\n", cdata->npss+1); - printf("\n"); + printf("\n"); printf("NVM Command Set Attributes\n"); printf("==========================\n"); printf("Submission Queue Entry Size\n"); @@ -110,6 +113,16 @@ print_controller(struct nvme_controller_data *cdata) cdata->oncs.dsm ? "Supported" : "Not Supported"); printf("Volatile Write Cache: %s\n", cdata->vwc.present ? "Present" : "Not Present"); + + if (cdata->oacs.nsmgmt) { + printf("\n"); + printf("Namespace Drive Attributes\n"); + printf("==========================\n"); + printf("NVM total cap: %s\n", + uint128_to_str(to128(cdata->untncap.tnvmcap), cbuf, sizeof(cbuf))); + printf("NVM unallocated cap: %s\n", + uint128_to_str(to128(cdata->untncap.unvmcap), cbuf, sizeof(cbuf))); + } } static void