nvme: move get-log page commands into a plugin - #3818
Conversation
|
I do like this here: $ nvme log
nvme-3.0-b.5
usage: nvme log <command> [<device>] [<args>]
The '<device>' may be either an NVMe controller device (ex: /dev/nvme0), an
nvme namespace device (ex: /dev/nvme0n1), or a mctp address in the form
mctp:<net>,<eid>[:ctrl-id]
Retrieve and show NVMe log pages
The following are all implemented sub-commands:
smart Retrieve SMART Log, show it
ana Retrieve ANA Log, show it
telemetry Retrieve FW Telemetry log write to file
fw Retrieve FW Log, show it
endurance Retrieve Endurance Group Log, show it
effects Retrieve Command Effects Log, show it
error Retrieve Error Log, show it
changed-ns-list Retrieve Changed Attached Namespace List, show it
changed-alloc-ns-list Retrieve Changed Allocated Namespace List, show it
predictable-lat Retrieve Predictable Latency per Nvmset Log, show it
pred-lat-event-agg Retrieve Predictable Latency Event Aggregate Log, show it
persistent-event Retrieve Persistent Event Log, show it
endurance-event-agg Retrieve Endurance Group Event Aggregate Log, show it
lba-status Retrieve LBA Status Information Log, show it
resv-notif Retrieve Reservation Notification Log, show it
boot-part Retrieve Boot Partition Log, show it
phy-rx-eom Retrieve Physical Interface Receiver Eye Opening Measurement, show it
self-test Retrieve the SELF-TEST Log, show it
fid-support-effects Retrieve FID Support and Effects log and show it
mi-cmd-support-effects Retrieve MI Command Support and Effects log and show it
media-unit-stat Retrieve the configuration and wear of media units, show it
supported-cap-config Retrieve the list of Supported Capacity Configuration Descriptors
mgmt-addr-list Retrieve Management Address List Log, show it
rotational-media-info Retrieve Rotational Media Information Log, show it
dispersed-ns-participating-nss Retrieve Dispersed Namespace Participating NVM Subsystems Log, show it
reachability-groups Retrieve Reachability Groups Log, show it
reachability-associations Retrieve Reachability Associations Log, show it
host-discovery Retrieve Host Discovery Log, show it
ave-discovery Retrieve AVE Discovery Log, show it
pull-model-ddc-req Retrieve Pull Model DDC Request Log, show it
power-measurement Retrieve Power Measurement Log, show it
sanitize Retrieve sanitize log, show it
version Shows the program version
help Display this helpThough this makes it inconsistent IMO. There are some more candidates which could go into a plugin, e.g. the identify commands or namespace commands... So in other words just moving the |
|
One idea I had is to enable deprecated commands per default, but move them out of the main list section and show them under 'deprecated commands'. While doing this, the plugins could also be split into two types, like spec plugins (zns, fdp, ...) and the vendor extensions. Furthermore issue an info that these are deprecated commands are going to be remove in the next major version update. This will allow people some time to transition. |
There was a problem hiding this comment.
Pull request overview
This PR restructures nvme-cli’s log-page-related CLI surface by moving the specialized *-log commands into a new core nvme log plugin (while keeping nvme get-log at top level), and introduces explicit handling for “core” vs “vendor” plugins plus a separate deprecated-commands help section.
Changes:
- Introduces a new core
logplugin (nvme log <page>) and converts legacy top-level*-logcommands into optional deprecated aliases. - Extends plugin/command metadata to track
coreplugins anddeprecatedcommands, and updatesnvme helpoutput to list them in separate sections. - Updates unit/e2e tests and documentation to reflect the new command paths and default build settings for deprecated commands.
Reviewed changes
Copilot reviewed 29 out of 30 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/unit/py/test_command_metadata_schema.py | Updates help-scraping logic to match new “core/vendor plugin” help sections and adjusts expected builtin commands. |
| tests/nvme_test.py | Updates wrappers to use nvme log smart / nvme log error instead of legacy top-level commands. |
| tests/e2e/plugins/micron/micron_vs_temperature_stats_test.py | Switches SMART log invocations and expected error text to nvme log smart. |
| tests/e2e/nvme_lba_status_log_test.py | Switches lba-status-log to nvme log lba-status. |
| tests/e2e/nvme_fw_log_test.py | Switches fw-log to nvme log fw. |
| src/plugin.h | Adds core and deprecated flags to plugin/command structs. |
| src/plugin.c | Updates nvme help output to separate core vs vendor plugins and to list deprecated subcommands separately. |
| src/nvme-regs.h | Adds new register-mapping helper header used by log plugin functionality. |
| src/nvme-regs.c | Adds register mmap/munmap helpers for CAP/CSS inspection. |
| src/nvme-builtin.h | Moves many *-log commands behind deprecated-alias gating and updates help strings with migration hints. |
| src/meson.build | Adds src/nvme-regs.c to the build. |
| src/cmd_handler.h | Adds NAME_CORE and ENTRY_DEPRECATED macro machinery to support new flags. |
| plugins/zns/zns.h | Marks plugin as core via NAME_CORE. |
| plugins/utils/utils.h | Marks plugin as core via NAME_CORE. |
| plugins/sed/sed.h | Marks plugin as core via NAME_CORE. |
| plugins/registry/registry-nvme.h | Marks plugin as core via NAME_CORE. |
| plugins/ocp/ocp-nvme.h | Marks plugin as core via NAME_CORE. |
| plugins/nbft/nbft-plugin.h | Marks plugin as core via NAME_CORE. |
| plugins/meson.build | Adds the new log plugin to the plugin build list. |
| plugins/log/log-plugin.h | Declares the new log plugin command set mapping former *-log commands to nvme log <name>. |
| plugins/log/log-plugin.c | Implements nvme log ... commands and shared log-page retrieval logic in the new plugin. |
| plugins/lm/lm-nvme.h | Marks plugin as core via NAME_CORE. |
| plugins/keys/keys-plugin.h | Marks plugin as core via NAME_CORE. |
| plugins/feat/feat-nvme.h | Marks plugin as core via NAME_CORE. |
| plugins/fdp/fdp.h | Marks plugin as core via NAME_CORE. |
| plugins/exclusion/exclusion-nvme.h | Marks plugin as core via NAME_CORE. |
| plugins/config/config-nvme.h | Marks plugin as core via NAME_CORE. |
| NEWS.md | Documents the command move to nvme log, deprecated-alias behavior, and new default build setting. |
| meson_options.txt | Enables deprecated commands by default and adds log to the selectable plugins list. |
Suppressed comments (1)
plugins/log/log-plugin.c:2457
- The
--raeoption is not honored for the initial Host Discovery log fetch: libnvme_get_log() is called withfalse, so the first request won’t set RAE even when requested (and may clear AEN state).
nvme_init_get_log_host_discovery(&cmd, rae, log, log_len);
err = libnvme_get_log(hdl, &cmd, false, log_len);
if (err)
goto err_free;
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There are too many top-level commands cluttering the space. Move the specialized get-log page commands into a plugin, e.g., nvme smart-log -> nvme log smart The main command 'nvme get-log' remains available at the top level. Signed-off-by: Daniel Wagner <dwagner@suse.com>
The more user friendly approach is to give time to migrate to the new commands instead having a flag day update. Thus enabled deprecated commands per default but move them out of the main sections when showing the available commands. Update the info that these commands will be removed in the next major version. Signed-off-by: Daniel Wagner <dwagner@suse.com>
The core plugins implement the spec and key part of the nvme-cli, thus should be listed before the vendor plugins. Signed-off-by: Daniel Wagner <dwagner@suse.com>
Avoid buffer overflows by using asprintf instead of fixed buffers. Signed-off-by: Daniel Wagner <dwagner@suse.com>
When in-lining the helper functions into the caller some of the arguments got mixed up. Fix those.
There are too many top-level commands cluttering the space. Move the specialized get-log page commands into a plugin, e.g.,
nvme smart-log -> nvme log smart
The main command 'nvme get-log' remains available at the top level.