diff options
author | Petr Uzel <petr.uzel@suse.cz> | 2016-06-14 13:17:00 +0200 |
---|---|---|
committer | Brian C. Lane <bcl@redhat.com> | 2016-06-23 17:13:31 -0700 |
commit | e4ae4330f3e33201aeeed3b7ca88e15d98d03e13 (patch) | |
tree | 7037dd4134d716c7527943cdf1845c8a11a40fd7 | |
parent | 4126d0292c75cf7d50a2f4e9d485a52b5beafccc (diff) | |
download | parted-e4ae4330f3e33201aeeed3b7ca88e15d98d03e13.tar.gz |
Add support for NVMe devices
Recognize NVMe Devices, so "parted -s /dev/nvme0n1" now prints
"NVMe Device (nvme)" instead of "Model: Unknown (unknown)".
In order for a device to be recognized as NVMe, it has to
have a 'blkext' major number. But since this major can be
used also by other device types, we also check the device
path contains 'nvme' as a substring.
* NEWS: Mention the change
* include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_NVME
* libparted/arch/linux.c(BLKEXT_MAJOR): New define.
* libparted/arch/linux.c(_is_blkext_major): New function.
* libparted/arch/linux.c(_device_probe_type): Recognize NVMe devices.
* libparted/arch/linux.c(linux_new): Handle NVMe devices.
* parted/parted.c(do_print): Add "nvme" to list of transports.
Signed-off-by: Brian C. Lane <bcl@redhat.com>
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | include/parted/device.in.h | 3 | ||||
-rw-r--r-- | libparted/arch/linux.c | 14 | ||||
-rw-r--r-- | parted/parted.c | 2 |
4 files changed, 19 insertions, 2 deletions
@@ -1,5 +1,7 @@ GNU parted NEWS -*- outline -*- + Parted now recognizes NVMe devices + * Noteworthy changes in release ?.? (????-??-??) [?] ** Bug Fixes diff --git a/include/parted/device.in.h b/include/parted/device.in.h index 82d4104..d38db44 100644 --- a/include/parted/device.in.h +++ b/include/parted/device.in.h @@ -49,7 +49,8 @@ typedef enum { PED_DEVICE_VIRTBLK = 15, PED_DEVICE_AOE = 16, PED_DEVICE_MD = 17, - PED_DEVICE_LOOP = 18 + PED_DEVICE_LOOP = 18, + PED_DEVICE_NVME = 19 } PedDeviceType; typedef struct _PedDevice PedDevice; diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index 326b956..a22b1d7 100644 --- a/libparted/arch/linux.c +++ b/libparted/arch/linux.c @@ -278,6 +278,7 @@ struct blkdev_ioctl_param { #define SDMMC_MAJOR 179 #define LOOP_MAJOR 7 #define MD_MAJOR 9 +#define BLKEXT_MAJOR 259 #define SCSI_BLK_MAJOR(M) ( \ (M) == SCSI_DISK0_MAJOR \ @@ -441,6 +442,12 @@ _is_virtblk_major (int major) return _major_type_in_devices (major, "virtblk"); } +static int +_is_blkext_major (int major) +{ + return _major_type_in_devices (major, "blkext"); +} + #ifdef ENABLE_DEVICE_MAPPER static int _dm_task_run_wait (struct dm_task *task, uint32_t cookie) @@ -692,6 +699,8 @@ _device_probe_type (PedDevice* dev) dev->type = PED_DEVICE_LOOP; } else if (dev_major == MD_MAJOR) { dev->type = PED_DEVICE_MD; + } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "nvme")) { + dev->type = PED_DEVICE_NVME; } else { dev->type = PED_DEVICE_UNKNOWN; } @@ -1465,6 +1474,11 @@ linux_new (const char* path) goto error_free_arch_specific; break; + case PED_DEVICE_NVME: + if (!init_generic (dev, _("NVMe Device"))) + goto error_free_arch_specific; + break; + case PED_DEVICE_ATARAID: if (!init_generic (dev, _("ATARAID Controller"))) goto error_free_arch_specific; diff --git a/parted/parted.c b/parted/parted.c index e6e4ac9..7e6c266 100644 --- a/parted/parted.c +++ b/parted/parted.c @@ -979,7 +979,7 @@ _print_disk_info (const PedDevice *dev, const PedDisk *diskp) "cpqarray", "file", "ataraid", "i2o", "ubd", "dasd", "viodasd", "sx8", "dm", "xvd", "sd/mmc", "virtblk", "aoe", - "md", "loopback"}; + "md", "loopback", "nvme"}; char* start = ped_unit_format (dev, 0); PedUnit default_unit = ped_unit_get_default (); |