NDCTL Changelog

The master index can be found at https://github.com/pmem/ndctl/releases‚Äč


This release incorporates functionality up to the 5.4 kernel, and adds a number of bug fixes, and improvements.

Highlights include small changes for PowerPC compatibility, improvements to the dax.sh unit test to detect failures in mapping huge pages, support for the 'security frozen' attribute, user experience improvements for the daxctl-reconfigure-device command, including an option to specify movable vs. non-movable state for onlining memory, and an option to allow create-namespaces to create a maximal configuration until it exhausts all available region capacity.


  • create-namespace: add --continue option

  • daxctl-reconfigure-device: add --no-movable option

  • daxctl-reconfigure-device: display movable state in listings

  • daxctl-reconfigure-device: detect races in memory onlining

  • security: support for 'security frozen' attribute


  • dax.sh: add detection for huge page failures

  • dax.sh: add XFS reflink dependency

  • daxctl-devices.sh: skip on older kernels


  • ndctl_dimm_security_is_frozen

  • daxctl_memory_is_movable

  • daxctl_memory_online_no_movable

v66.0 - 7th August, 2019

This release incorporates functionality up to the 5.3 kernel, and adds a number of bug fixes, and improvements.

Highlights include a new command to reconfigure dax devices to different modes (devdax - default, and system-ram - to hotplug the dax device as system memory), improvements to ndctl-{read,write,init}-labels allowing smaller sized reads/writes, usability fixes to ndctl-monitor, and ndctl-create-namespace, and a fix to ndctl-check-namespace allowing it to be used on systems with different page sizes.


  • daxctl-reconfigure-device: new command for device mode management

  • daxctl-{on,off}line-memory: new commands for devices in system-ram mode

  • monitor: logging improvements, allow sending to background

  • inject-error: refuse to operate on active BTT namespaces

  • *-labels: improvements to minimize data transfer

  • create-namespace: usability improvements around region search


  • security.sh: handle backup keys, mark test as 'destructive'

  • device-dax: fix bus-model detection

  • daxctl-devices: new test for daxctl-reconfigure-device


  • ndctl_cmd_cfg_read_set_extent

  • ndctl_cmd_cfg_write_set_extent

  • ndctl_dimm_read_label_extent

  • ndctl_dimm_read_label_index

  • ndctl_dimm_zero_label_extent

  • daxctl_dev_disable

  • daxctl_dev_enable_devdax

  • daxctl_dev_enable_ram

  • daxctl_dev_get_ctx

  • daxctl_dev_get_memory

  • daxctl_dev_get_resource

  • daxctl_dev_get_target_node

  • daxctl_dev_is_enabled

  • daxctl_memory_get_block_size

  • daxctl_memory_get_dev

  • daxctl_memory_get_node_path

  • daxctl_memory_is_online

  • daxctl_memory_num_sections

  • daxctl_memory_offline

  • daxctl_memory_online

v65.0 - 9th May, 2019

This release incorporates functionality up to the 5.1 kernel, and adds a number of bug fixes and improvements.

Highlights include a new command to clear errors on a given namespace, a new travis YAML configuration to enable travis builds for Ubuntu, an example QEMU script in contrib/ for HMAT emulation, an optional poll interval for wait-scrub, several fixes related to the security commands, support for the HYPER-V family of DSM commands, and several fixes to tests, documentation, and related to building.


  • clear-errors: new command to clear errors on a namespace

  • monitor: remove the requirement of a default config

  • sanitize-dimm: allow a zero-key for secure-erase

  • sanitize-dimm: preserve keys after an overwrite

  • load-keys: fix for non-TPM keys


  • security: add a new testlet for load-keys

  • test-core: add dax_pmem* modules

  • misc: fix sys/mman.h vs linux/mman.h includes


  • ndctl_bus_poll_scrub_completion

v64.1 - 5th February, 2019


  • Fix build issues around keyutils inclusion

v64.0 - 2nd February, 2019

This release incorporates functionality up to the 5.0 kernel, and adds a number of bug fixes and improvements.

Highlights include a migration path for the new dax-bus ABI, several cleanups to ndctl-monitor, support for firmware status translation, displaying the supported_alignments attribute, and using it in the namespace creation process, and support for security operations as defined in the Intel DSM specification.


  • inject-smart: check the firmware status for errors

  • zero-labels: correctly handle firmware errors

  • create-namespace: use supported_alignments when available

  • Add new security commands


  • security.sh: new test for security commands

  • device-dax: fix intermittent poison handling failures

  • dsm-fail: cleanup leftover debug


  • ndctl_cmd_submit_xlat

  • ndctl_cmd_xlat_firmware_status

  • ndctl_dax_get_num_alignments

  • ndctl_dax_get_supported_alignment

  • ndctl_dimm_disable_passphrase

  • ndctl_dimm_freeze_security

  • ndctl_dimm_get_security

  • ndctl_dimm_master_secure_erase

  • ndctl_dimm_overwrite

  • ndctl_dimm_secure_erase

  • ndctl_dimm_update_master_passphrase

  • ndctl_dimm_update_passphrase

  • ndctl_dimm_wait_overwrite

  • ndctl_pfn_get_num_alignments

  • ndctl_pfn_get_supported_alignment

v63.0 - 7th October, 2018

This release incorporates functionality up to the 4.20 kernel, and a number of bug fixes and improvements.

Highlights include switching the documentation build to asciidoctor by default, fixes to destroy-namespace for reporting the number of namespaces acted upon, using the namespace badblocks listings exported by the kernel, and making them available to non-root users, a new helper for retrieving the dirty-shutdown-count, reverting the udev rule to set the shutdown count latch and cache the dirty-shutdown-count, and fixing the ndctl-monitor daemon to exit successfully in the absence of NVDIMMs.


  • destroy-namespace: fix number of namespaces reported

  • check-labels: fix the number of labels checked reporting

  • monitor: exit daemon with success when no DIMMs found


  • Fix a missing include for list_smart_dimm

  • pfn-meta-errors.sh: new test for clearing errors in the volatile 'struct page' metadata area


  • ndctl_dimm_get_dirty_shutdown

  • ndctl_namespace_get_first_badblock

  • ndctl_namespace_get_next_badblock

v62.0 - 9th July, 2018

This release incorporates functionality up to the 4.19 kernel, and a number of bug fixes and improvements.

Highlights include addition of the 'ndctl monitor' command to monitor for SMART health events, use of the new max_available_extent sysfs attribute for namespace creation, verbosity levels for ndctl-list, a udev rule for enabling the LSS latch when supported, a bypass route for making the unsafe shutdown count available for non-privileged users, improvements to ndctl-inject-smart that include an 'uninject' option for all fields, and a new unit test, a number of static analysis fixes, and unit test improvements and fixes.


  • monitor: new command for monitoring SMART health events

  • list: support -v, -vv, -vvv verbosity levels

  • inject-smart: add --uninject- and --uninject-all options

  • create-namespace: use maxavailable_extent for namespace creation

  • list: add new fields to -H for alarm_enabled

  • list: always output JSON arrays when --human is absent


  • dax.sh: dax-poisonCheck for availability of MAP_SYNC

  • dax.sh: fix return code

  • device-dax: relax canned timeouts

  • monitor: new test

  • inject-smart: new test

  • max_available_extent_ns: new test


  • ndctl_cmd_smart_inject_ctrl_temperature

  • ndctl_dimm_get_event_flags

  • ndctl_dimm_get_flags

  • ndctl_dimm_get_health

  • ndctl_dimm_is_flag_supported

  • ndctl_dimm_smart_inject_supported

  • ndctl_region_get_max_available_extent

v61.2 - 6th July, 2018


  • libndctl: fix the uninject API (v1) actually injecting errors

v61.1 - 27th June, 2018


  • Add autotools detection for MAP_SYNC

v61.0 - 26th June, 2018

This release incorporates functionality up to the 4.18 kernel, and a number of bug fixes and improvements.

Highlights include a fix to the error injection APIs to inject fewer bytes of errors per sector, support for building documentation with asciidoctor in addition to asciidoc, multi-arrgument support for util__filter, and a new OPTION_FILENAME in option parsing. Unit test updates include cleanups to unit test scripts refactoring out a lot of common boilerplate, MADV_HWPOISON tests, and a new test for capacity vs label locking.


  • inject-error: add a --saturate option to inject entire sectors

  • list: display the 'map' location in namespace listings

  • list: add controller temperature, and its threshold/alarm setting


  • dax-pmd, device-dax: add a test for MADV_HWPOISON

  • sector-mode.sh: fix to work with updated label support in nfit_test

  • common: source common bash functions and variables

  • dsm-fail: test for capacity vs label locking

  • libndctl: update for smart controller temperature

  • various: disable tests that inject poison with dax until 4.19


  • ndctl_cmd_ars_cap_get_clear_unit

  • ndctl_cmd_ars_stat_get_flag_overflow

  • ndctl_namespace_inject_error2

  • ndctl_namespace_uninject_error2

v60.3 - May 17th, 2018


  • ndctl: fix libtool versioning

v60.2 - May 16th, 2018


  • inject-error: inject only 'clear_err_unit' bytes of error per sector

v60.1 - April 23rd, 2018


  • documentation: add inject-smart to the Makefile

  • libndctl: fix ABI breakage due to rename of fw_info_get_updated_version

v60 - April 17th, 2018


This release incorporates functionality up to the 4.17 kernel, and a number of bug fixes and improvements.

Highlights include ack_shutdown_count support, fixes to tests that performed error injections, refactor core topology walking into util_filter_walk(), a new test for partition auto detection for btt/blk namespacees, numa_node support for regions, cleanups to the firmware update command, removal of daxctl io, support for persistence domains for buses and regions, APIs for retrieving and setting the write_cache attribute for namespacees, fixes to ARS APIs, new ARS control commands in ndctl, and an API for the deep_flush attribute for regions.


  • ndctl list: option to display firmware information

  • ndctl create-namespace: fix minimum alignment detection

  • ndctl list: allow filtereing by numa node

  • ndctl list: fix sector_size sometimes showing as -1

  • daxctl io: remove as this functionality is provided in PMDK

  • ndctl update-firmware: fix DSM input/output sizes various: replace direct errno prints with strerror strings

  • ndctl read-labels: fix json reference counting

  • various: replace refrences to 'memory' or 'dax' with 'devdax' or 'fsdax'

  • ndctl list: report the bus scrub state

  • ndctl {wait,start}-scrub: new commands for ARS control

  • ndctl list: add a raw_uuid field to namespace listings


  • ack-shutdown-count-set: new test for the shutdown count APIs

  • various: ensure we use the locally build 'ndctl'

  • various: fix usage of error injection commands for older kernels

  • btt-pad-compat: fix stale json being reused for future commands

  • btt-pad-compat: explicitly request namespace size

  • dpa-alloc: fix for kernels with 4M min namespace size

  • btt-pad-compat: skip for pre-4k capable kernels

  • firmware-update: remove fallocate

  • rescan-partitions: new test for autodetection of partitions

  • core: fix module taint sanity check

  • libndctl: add write_cache testing in check_nameespaces()

  • pmem-errors: fix locking vs new ARS reworks


  • ndctl_bus_get_persistence_domain

  • ndctl_bus_get_scrub_state

  • ndctl_bus_start_scrub

  • ndctl_cmd_fw_info_get_next_version

  • ndctl_dimm_cmd_new_ack_shutdown_count

  • ndctl_dimm_fw_update_supported

  • ndctl_namespace_disable_write_cache

  • ndctl_namespace_enable_write_cache

  • ndctl_namespace_write_cache_is_enabled

  • ndctl_region_deep_flush

  • ndctl_region_get_numa_node

  • ndctl_region_get_persistence_domain

v59.3 - March 27th, 2018


  • create-namespace: fix minimum alignment detection

  • list: fix sector_size listing

  • API, smart: fix threshold temperature helper

  • update-firmware: fix input/output size for NVDIMM_FAMILY_INTEL

  • update-firmware: kill usage of flock() in verify_fw_file()

  • test: fix module-taint sanity-check

v59.2 - February 9th, 2018


  • Unit test fixups for package build environments.

v59.1 - February 9th, 2018


  • Compile fixes for ARM and PowerPC

v59.0 - February 9th, 2018

This release incorporates functionality up to the 4.16 kernel, and a number of bug fixes and improvements.

Highlights include new ACPI error injection DSM support, a variety of smart enhancements that include getting and setting thresholds, injecting smart attribute values and flags, support for firmware update, and fixes for a BTT padding incompatibility.


  • ndctl inject-error - new command for media error injection

  • ndctl disable-region - check for mounted namespaces

  • ndctl {create,destroy}-namespace - clarify --force option

  • ndctl create-namespace - clarify autolabel failures and fallback

  • ndctl list - use 'fsdax' and 'devdax' modes

  • ndctl update-firmware - new command for firmware update

  • ndctl inject-smart - new command for setting smart thresholds and injecting attributes


  • inject-error: new test for the error injection interfaces

  • btt-errors: new test for media error handling in the BTT

  • smart-listen: test for listening for smart triggers

  • smart-notify: generate smart notifications

  • hugetlb: test hugetlb faults

  • btt-pad-incompat: regression test for the old and new versions of the btt log padding format

  • update-firmware: test the firmware update process


  • ndctl_bb_get_block

  • ndctl_bb_get_count

  • ndctl_bus_get_scrub_count

  • ndctl_bus_has_error_injection

  • ndctl_bus_wait_for_scrub_completion

  • ndctl_cmd_fw_fquery_get_fw_rev

  • ndctl_cmd_fw_info_get_max_query_time

  • ndctl_cmd_fw_info_get_max_send_len

  • ndctl_cmd_fw_info_get_query_interval

  • ndctl_cmd_fw_info_get_run_version

  • ndctl_cmd_fw_info_get_storage_size

  • ndctl_cmd_fw_info_get_updated_version

  • ndctl_cmd_fw_start_get_context

  • ndctl_cmd_fw_xlat_firmware_status

  • ndctl_cmd_smart_get_ctrl_temperature

  • ndctl_cmd_smart_get_media_temperature

  • ndctl_cmd_smart_get_shutdown_count

  • ndctl_cmd_smart_inject_fatal

  • ndctl_cmd_smart_inject_media_temperature

  • ndctl_cmd_smart_inject_spares

  • ndctl_cmd_smart_inject_unsafe_shutdown

  • ndctl_cmd_smart_threshold_get_ctrl_temperature

  • ndctl_cmd_smart_threshold_get_media_temperature

  • ndctl_cmd_smart_threshold_get_supported_alarms

  • ndctl_cmd_smart_threshold_set_alarm_control

  • ndctl_cmd_smart_threshold_set_ctrl_temperature ndctl_cmd_smart_threshold_set_media_temperature

  • ndctl_cmd_smart_threshold_set_spares

  • ndctl_cmd_smart_threshold_set_temperature

  • ndctl_decode_smart_temperature

  • ndctl_dimm_aliased ndctl_dimm_cmd_new_fw_abort

  • ndctl_dimm_cmd_new_fw_finish

  • ndctl_dimm_cmd_new_fw_finish_query

  • ndctl_dimm_cmd_new_fw_get_info

  • ndctl_dimm_cmd_new_fw_send

  • ndctl_dimm_cmd_new_fw_start_update

  • ndctl_dimm_cmd_new_smart_inject

  • ndctl_dimm_cmd_new_smart_set_threshold

  • ndctl_dimm_locked ndctl_encode_smart_temperature

  • ndctl_namespace_inject_error

  • ndctl_namespace_injection_get_first_bb

  • ndctl_namespace_injection_get_next_bb

  • ndctl_namespace_injection_status

  • ndctl_namespace_uninject_error