You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.4 KiB
122 lines
4.4 KiB
From 62cb6416f112dda0b0b969c1247cbc0f98314182 Mon Sep 17 00:00:00 2001 |
|
From: Petr Uzel <petr.uzel@suse.cz> |
|
Date: Tue, 14 Jun 2016 13:17:00 +0200 |
|
Subject: [PATCH] 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> |
|
(cherry picked from commit e4ae4330f3e33201aeeed3b7ca88e15d98d03e13) |
|
|
|
Resolves: rhbz#1316239 |
|
--- |
|
NEWS | 4 ++++ |
|
include/parted/device.in.h | 3 ++- |
|
libparted/arch/linux.c | 14 ++++++++++++++ |
|
parted/parted.c | 2 +- |
|
4 files changed, 21 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/NEWS b/NEWS |
|
index d1ab2a6..d1a6f58 100644 |
|
--- a/NEWS |
|
+++ b/NEWS |
|
@@ -1,5 +1,9 @@ |
|
GNU parted NEWS -*- outline -*- |
|
|
|
+* Noteworthy changes in release 3.1-29 (2017-04-11) [RHEL7.4] |
|
+ |
|
+ Parted now recognizes NVMe devices |
|
+ |
|
* Noteworthy changes in release 3.1-18 (2014-08-12) [RHEL7.1] |
|
|
|
** New features |
|
diff --git a/include/parted/device.in.h b/include/parted/device.in.h |
|
index a3d1737..b0aa1f2 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 341bbbb..fa329f4 100644 |
|
--- a/libparted/arch/linux.c |
|
+++ b/libparted/arch/linux.c |
|
@@ -275,6 +275,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 \ |
|
@@ -437,6 +438,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 |
|
_is_dm_major (int major) |
|
@@ -600,6 +607,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; |
|
} |
|
@@ -1372,6 +1381,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 789030a..957789a 100644 |
|
--- a/parted/parted.c |
|
+++ b/parted/parted.c |
|
@@ -947,7 +947,7 @@ _print_disk_info (const PedDevice *dev, const PedDisk *disk) |
|
"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 (); |
|
-- |
|
2.9.4 |
|
|
|
|