diff --git a/.gitignore b/.gitignore
index 5828a56..f196bae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/v1.6.tar.gz
+SOURCES/v1.8.1.tar.gz
diff --git a/.nvme-cli.metadata b/.nvme-cli.metadata
index a5231c2..e375033 100644
--- a/.nvme-cli.metadata
+++ b/.nvme-cli.metadata
@@ -1 +1 @@
-c18c82ea88994ab98dc8a710d2f16a41315495b6 SOURCES/v1.6.tar.gz
+349affaf735fe14a8f8f4f48238d357d712aba40 SOURCES/v1.8.1.tar.gz
diff --git a/SOURCES/nvme-cli-add-netapp-ontapdev-command-patch b/SOURCES/nvme-cli-add-netapp-ontapdev-command-patch
deleted file mode 100644
index b3b1a13..0000000
--- a/SOURCES/nvme-cli-add-netapp-ontapdev-command-patch
+++ /dev/null
@@ -1,429 +0,0 @@
-commit 70bfe077af40aeace6c9e2b628b20cf8a34c1def
-Author: Martin George <marting@netapp.com>
-Date:   Mon Apr 1 09:39:56 2019 -0700
-
-    nvme-cli: add netapp ontapdevices command
-    
-    Add a new ontapdevices command to the NetApp plugin for
-    NetApp ONTAP devices.
-    
-    Signed-off-by: Martin George <marting@netapp.com>
-    Reviewed-by: Steve Schremmer <sschremm@netapp.com>
-
-diff --git a/plugins/netapp/netapp-nvme.c b/plugins/netapp/netapp-nvme.c
-index 416e74e..2951311 100644
---- a/plugins/netapp/netapp-nvme.c
-+++ b/plugins/netapp/netapp-nvme.c
-@@ -21,6 +21,7 @@
- #include <unistd.h>
- #include <errno.h>
- #include <string.h>
-+#include <sys/ioctl.h>
- 
- #include "nvme.h"
- #include "nvme-ioctl.h"
-@@ -31,12 +32,28 @@
- #define CREATE_CMD
- #include "netapp-nvme.h"
- 
-+#define ONTAP_C2_LOG_ID		0xC2
-+#define ONTAP_C2_LOG_SIZE	4096
-+#define ONTAP_LABEL_LEN		260
-+#define ONTAP_NS_PATHLEN	520
-+
- enum {
- 	NNORMAL,
- 	NJSON,
- 	NCOLUMN,
- };
- 
-+enum {
-+	ONTAP_C2_LOG_SUPPORTED_LSP	= 0x0,
-+	ONTAP_C2_LOG_NSINFO_LSP		= 0x1,
-+};
-+
-+enum {
-+	ONTAP_VSERVER_TLV		= 0x11,
-+	ONTAP_VOLUME_TLV		= 0x12,
-+	ONTAP_NS_TLV			= 0x13,
-+};
-+
- static const char *dev_path = "/dev/";
- 
- struct smdevice_info {
-@@ -46,6 +63,15 @@ struct smdevice_info {
- 	char			dev[265];
- };
- 
-+struct ontapdevice_info {
-+	int			nsid;
-+	struct nvme_id_ctrl	ctrl;
-+	struct nvme_id_ns	ns;
-+	char			nsdesc[4096];
-+	unsigned char		log_data[ONTAP_C2_LOG_SIZE];
-+	char			dev[265];
-+};
-+
- #define ARRAY_LABEL_LEN		60
- #define VOLUME_LABEL_LEN	60
- 
-@@ -77,6 +103,100 @@ static void netapp_nguid_to_str(char *str, __u8 *nguid)
- 		str += sprintf(str, "%02x", nguid[i]);
- }
- 
-+static void netapp_get_ns_size(char *size, long long *lba,
-+		struct nvme_id_ns *ns)
-+{
-+	*lba = 1 << ns->lbaf[(ns->flbas & 0x0F)].ds;
-+	double nsze = le64_to_cpu(ns->nsze) * (*lba);
-+	const char *s_suffix = suffix_si_get(&nsze);
-+
-+	sprintf(size, "%.2f%sB", nsze, s_suffix);
-+}
-+
-+static void netapp_uuid_to_str(char *str, void *data)
-+{
-+#ifdef LIBUUID
-+	uuid_t uuid;
-+	struct nvme_ns_id_desc *desc = data;
-+
-+	memcpy(uuid, data + sizeof(*desc), 16);
-+	uuid_unparse_lower(uuid, str);
-+#endif
-+}
-+
-+static void ontap_labels_to_str(char *dst, char *src, int count)
-+{
-+	int i;
-+
-+	memset(dst, 0, ONTAP_LABEL_LEN);
-+	for (i = 0; i < count; i++) {
-+		if (src[i] >= '!' && src[i] <= '~')
-+			dst[i] = src[i];
-+		else
-+			break;
-+	}
-+	dst[i] = '\0';
-+}
-+
-+static void netapp_get_ontap_labels(char *vsname, char *nspath,
-+		unsigned char *log_data)
-+{
-+	int lsp, tlv, label_len;
-+	char *vserver_name, *volume_name, *namespace_name;
-+	char vol_name[ONTAP_LABEL_LEN], ns_name[ONTAP_LABEL_LEN];
-+	const char *ontap_vol = "/vol/";
-+	int i, j;
-+
-+	/* get the lsp */
-+	lsp = (*(__u8 *)&log_data[16]) & 0x0F;
-+	if (lsp != ONTAP_C2_LOG_NSINFO_LSP)
-+		/* lsp not related to nsinfo */
-+		return;
-+
-+	/* get the vserver tlv and name */
-+	tlv = *(__u8 *)&log_data[32];
-+	if (tlv == ONTAP_VSERVER_TLV) {
-+		label_len = (*(__u16 *)&log_data[34]) * 4;
-+		vserver_name = (char *)&log_data[36];
-+		ontap_labels_to_str(vsname, vserver_name, label_len);
-+	} else {
-+		/* not the expected vserver tlv */
-+		fprintf(stderr, "Unable to fetch ONTAP vserver name\n");
-+		return;
-+	}
-+
-+	i = 36 + label_len;
-+	j = i + 2;
-+	/* get the volume tlv and name */
-+	tlv = *(__u8 *)&log_data[i];
-+	if (tlv == ONTAP_VOLUME_TLV) {
-+		label_len = (*(__u16 *)&log_data[j]) * 4;
-+		volume_name = (char *)&log_data[j + 2];
-+		ontap_labels_to_str(vol_name, volume_name, label_len);
-+	} else {
-+		/* not the expected volume tlv */
-+		fprintf(stderr, "Unable to fetch ONTAP volume name\n");
-+		return;
-+	}
-+
-+	i += 4 + label_len;
-+	j += 4 + label_len;
-+	/* get the namespace tlv and name */
-+	tlv = *(__u8 *)&log_data[i];
-+	if (tlv == ONTAP_NS_TLV) {
-+		label_len = (*(__u16 *)&log_data[j]) * 4;
-+		namespace_name = (char *)&log_data[j + 2];
-+		ontap_labels_to_str(ns_name, namespace_name, label_len);
-+	} else {
-+		/* not the expected namespace tlv */
-+		fprintf(stderr, "Unable to fetch ONTAP namespace name\n");
-+		return;
-+	}
-+
-+	snprintf(nspath, ONTAP_NS_PATHLEN, "%s%s%s%s", ontap_vol,
-+			vol_name, "/", ns_name);
-+}
-+
- static void netapp_smdevice_json(struct json_array *devices, char *devname,
- 		char *arrayname, char *volname, int nsid, char *nguid,
- 		char *ctrl, char *astate, char *size, long long lba,
-@@ -99,6 +219,25 @@ static void netapp_smdevice_json(struct json_array *devices, char *devname,
- 	json_array_add_value_object(devices, device_attrs);
- }
- 
-+static void netapp_ontapdevice_json(struct json_array *devices, char *devname,
-+		char *vsname, char *nspath, int nsid, char *uuid,
-+		char *size, long long lba, long long nsze)
-+{
-+	struct json_object *device_attrs;
-+
-+	device_attrs = json_create_object();
-+	json_object_add_value_string(device_attrs, "Device", devname);
-+	json_object_add_value_string(device_attrs, "Vserver", vsname);
-+	json_object_add_value_string(device_attrs, "Namespace_Path", nspath);
-+	json_object_add_value_int(device_attrs, "NSID", nsid);
-+	json_object_add_value_string(device_attrs, "UUID", uuid);
-+	json_object_add_value_string(device_attrs, "Size", size);
-+	json_object_add_value_int(device_attrs, "LBA_Data_Size", lba);
-+	json_object_add_value_int(device_attrs, "Namespace_Size", nsze);
-+
-+	json_array_add_value_object(devices, device_attrs);
-+}
-+
- static void netapp_smdevices_print(struct smdevice_info *devices, int count, int format)
- {
- 	struct json_object *root = NULL;
-@@ -161,6 +300,94 @@ static void netapp_smdevices_print(struct smdevice_info *devices, int count, int
- 	}
- }
- 
-+static void netapp_ontapdevices_print(struct ontapdevice_info *devices,
-+		int count, int format)
-+{
-+	struct json_object *root = NULL;
-+	struct json_array *json_devices = NULL;
-+	char vsname[ONTAP_LABEL_LEN] = " ";
-+	char nspath[ONTAP_NS_PATHLEN] = " ";
-+	long long lba;
-+	char size[128];
-+	char uuid_str[37] = " ";
-+	int i;
-+
-+	char basestr[] = "%s, Vserver %s, Namespace Path %s, NSID %d, UUID %s, %s\n";
-+	char columnstr[] = "%-16s %-25s %-50s %-4d %-38s %-9s\n";
-+
-+	/* default to 'normal' output format */
-+	char *formatstr = basestr;
-+
-+	if (format == NCOLUMN) {
-+		/* change output string and print column headers */
-+		formatstr = columnstr;
-+		printf("%-16s %-25s %-50s %-4s %-38s %-9s\n",
-+				"Device", "Vserver", "Namespace Path",
-+				"NSID", "UUID", "Size");
-+		printf("%-16s %-25s %-50s %-4s %-38s %-9s\n",
-+				"----------------", "-------------------------",
-+				"--------------------------------------------------",
-+				"----", "--------------------------------------",
-+				"---------");
-+	} else if (format == NJSON) {
-+		/* prepare for json output */
-+		root = json_create_object();
-+		json_devices = json_create_array();
-+	}
-+
-+	for (i = 0; i < count; i++) {
-+
-+		netapp_get_ns_size(size, &lba, &devices[i].ns);
-+		netapp_uuid_to_str(uuid_str, devices[i].nsdesc);
-+		netapp_get_ontap_labels(vsname, nspath, devices[i].log_data);
-+
-+		if (format == NJSON) {
-+			netapp_ontapdevice_json(json_devices, devices[i].dev,
-+					vsname, nspath, devices[i].nsid,
-+					uuid_str, size, lba,
-+					le64_to_cpu(devices[i].ns.nsze));
-+		} else
-+			printf(formatstr, devices[i].dev, vsname, nspath,
-+					devices[i].nsid, uuid_str, size);
-+	}
-+
-+	if (format == NJSON) {
-+		/* complete the json output */
-+		json_object_add_value_array(root, "ONTAPdevices", json_devices);
-+		json_print_object(root, NULL);
-+	}
-+}
-+
-+static int nvme_get_ontap_c2_log(int fd, __u32 nsid, void *buf, __u32 buflen)
-+{
-+	struct nvme_admin_cmd get_log;
-+	int err;
-+
-+	memset(buf, 0, buflen);
-+	memset(&get_log, 0, sizeof(struct nvme_admin_cmd));
-+
-+	get_log.opcode = nvme_admin_get_log_page;
-+	get_log.nsid = nsid;
-+	get_log.addr = (__u64)(uintptr_t)buf;
-+	get_log.data_len = buflen;
-+
-+	__u32 numd = (get_log.data_len >> 2) - 1;
-+	__u32 numdu = numd >> 16;
-+	__u32 numdl = numd & 0xFFFF;
-+
-+	get_log.cdw10 = ONTAP_C2_LOG_ID | (numdl << 16);
-+	get_log.cdw10 |= ONTAP_C2_LOG_NSINFO_LSP << 8;
-+	get_log.cdw11 = numdu;
-+
-+	err = nvme_submit_passthru(fd, NVME_IOCTL_ADMIN_CMD, &get_log);
-+	if (err) {
-+		fprintf(stderr, "ioctl error %0x\n", err);
-+		return 1;
-+	}
-+
-+	return 0;
-+}
-+
- static int netapp_smdevices_get_info(int fd, struct smdevice_info *item,
- 				     const char *dev)
- {
-@@ -188,6 +415,50 @@ static int netapp_smdevices_get_info(int fd, struct smdevice_info *item,
- 	return 1;
- }
- 
-+static int netapp_ontapdevices_get_info(int fd, struct ontapdevice_info *item,
-+		const char *dev)
-+{
-+	int err;
-+
-+	err = nvme_identify_ctrl(fd, &item->ctrl);
-+	if (err) {
-+		fprintf(stderr, "Identify Controller failed to %s (%s)\n",
-+				dev, strerror(err));
-+		return 0;
-+	}
-+
-+	if (strncmp("NetApp ONTAP Controller", item->ctrl.mn, 23) != 0)
-+		/* not the right controller model */
-+		return 0;
-+
-+	item->nsid = nvme_get_nsid(fd);
-+
-+	err = nvme_identify_ns(fd, item->nsid, 0, &item->ns);
-+	if (err) {
-+		fprintf(stderr, "Unable to identify namespace for %s (%s)\n",
-+				dev, strerror(err));
-+		return 0;
-+	}
-+
-+	err = nvme_identify_ns_descs(fd, item->nsid, item->nsdesc);
-+	if (err) {
-+		fprintf(stderr, "Unable to identify namespace descriptor for %s (%s)\n",
-+				dev, strerror(err));
-+		return 0;
-+	}
-+
-+	err = nvme_get_ontap_c2_log(fd, item->nsid, item->log_data, ONTAP_C2_LOG_SIZE);
-+	if (err) {
-+		fprintf(stderr, "Unable to get log page data for %s (%s)\n",
-+				dev, strerror(err));
-+		return 0;
-+	}
-+
-+	strncpy(item->dev, dev, sizeof(item->dev));
-+
-+	return 1;
-+}
-+
- static int netapp_nvme_filter(const struct dirent *d)
- {
- 	char path[264];
-@@ -294,3 +565,74 @@ static int netapp_smdevices(int argc, char **argv, struct command *command,
- 	free(smdevices);
- 	return 0;
- }
-+
-+/* handler for 'nvme netapp ontapdevices' */
-+static int netapp_ontapdevices(int argc, char **argv, struct command *command,
-+		struct plugin *plugin)
-+{
-+	const char *desc = "Display information about ONTAP devices.";
-+	struct config {
-+		char *output_format;
-+	};
-+	struct config cfg = {
-+		.output_format = "normal",
-+	};
-+	struct dirent **devices;
-+	int num, i, fd, ret, fmt;
-+	struct ontapdevice_info *ontapdevices;
-+	char path[264];
-+	int num_ontapdevices = 0;
-+
-+	const struct argconfig_commandline_options opts[] = {
-+		{"output-format", 'o', "FMT", CFG_STRING, &cfg.output_format,
-+			required_argument, "Output Format: normal|json|column"},
-+		{NULL}
-+	};
-+
-+	ret = argconfig_parse(argc, argv, desc, opts, &cfg, sizeof(cfg));
-+	if (ret < 0)
-+		return ret;
-+
-+	fmt = netapp_output_format(cfg.output_format);
-+	if (fmt != NNORMAL && fmt != NCOLUMN && fmt != NJSON) {
-+		fprintf(stderr, "Unrecognized output format: %s\n", cfg.output_format);
-+		return -EINVAL;
-+	}
-+
-+	num = scandir(dev_path, &devices, netapp_nvme_filter, alphasort);
-+	if (num <= 0) {
-+		fprintf(stderr, "No NVMe devices detected.\n");
-+		return num;
-+	}
-+
-+	ontapdevices = calloc(num, sizeof(*ontapdevices));
-+	if (!ontapdevices) {
-+		fprintf(stderr, "Unable to allocate memory for devices.\n");
-+		return -ENOMEM;
-+	}
-+
-+	for (i = 0; i < num; i++) {
-+		snprintf(path, sizeof(path), "%s%s", dev_path,
-+				devices[i]->d_name);
-+		fd = open(path, O_RDONLY);
-+		if (fd < 0) {
-+			fprintf(stderr, "Unable to open %s: %s\n", path,
-+					strerror(errno));
-+			continue;
-+		}
-+
-+		num_ontapdevices += netapp_ontapdevices_get_info(fd,
-+				&ontapdevices[num_ontapdevices], path);
-+
-+		close(fd);
-+	}
-+
-+	if (num_ontapdevices)
-+		netapp_ontapdevices_print(ontapdevices, num_ontapdevices, fmt);
-+
-+	for (i = 0; i < num; i++)
-+		free(devices[i]);
-+	free(devices);
-+	free(ontapdevices);
-+	return 0;
-+}
-diff --git a/plugins/netapp/netapp-nvme.h b/plugins/netapp/netapp-nvme.h
-index 3dd019e..d4eebd6 100644
---- a/plugins/netapp/netapp-nvme.h
-+++ b/plugins/netapp/netapp-nvme.h
-@@ -9,6 +9,7 @@
- PLUGIN(NAME("netapp", "NetApp vendor specific extensions"),
- 	COMMAND_LIST(
- 		ENTRY("smdevices", "NetApp SMdevices", netapp_smdevices)
-+		ENTRY("ontapdevices", "NetApp ONTAPdevices", netapp_ontapdevices)
- 	)
- );
- 
diff --git a/SOURCES/nvme-cli-add-netapp-ontapdev-man-page-patch b/SOURCES/nvme-cli-add-netapp-ontapdev-man-page-patch
deleted file mode 100644
index 450287c..0000000
--- a/SOURCES/nvme-cli-add-netapp-ontapdev-man-page-patch
+++ /dev/null
@@ -1,950 +0,0 @@
-commit 8f963b85132074f370e5f1e8318890fdbbf605b4
-Author: Martin George <marting@netapp.com>
-Date:   Mon Apr 1 09:39:57 2019 -0700
-
-    nvme-cli: add netapp ontapdevices man page
-    
-    Signed-off-by: Martin George <marting@netapp.com>
-    Reviewed-by: Steve Schremmer <sschremm@netapp.com>
-
-diff --git a/Documentation/nvme-netapp-ontapdevices.1 b/Documentation/nvme-netapp-ontapdevices.1
-new file mode 100644
-index 0000000..0669457
---- /dev/null
-+++ b/Documentation/nvme-netapp-ontapdevices.1
-@@ -0,0 +1,74 @@
-+'\" t
-+.\"     Title: nvme-netapp-ontapdevices
-+.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
-+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-+.\"      Date: 01/08/2019
-+.\"    Manual: NVMe Manual
-+.\"    Source: NVMe
-+.\"  Language: English
-+.\"
-+.TH "NVME\-NETAPP\-ONTAPDEV" "1" "01/08/2019" "NVMe" "NVMe Manual"
-+.\" -----------------------------------------------------------------
-+.\" * Define some portability stuff
-+.\" -----------------------------------------------------------------
-+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+.\" http://bugs.debian.org/507673
-+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+.ie \n(.g .ds Aq \(aq
-+.el       .ds Aq '
-+.\" -----------------------------------------------------------------
-+.\" * set default formatting
-+.\" -----------------------------------------------------------------
-+.\" disable hyphenation
-+.nh
-+.\" disable justification (adjust text to left margin only)
-+.ad l
-+.\" -----------------------------------------------------------------
-+.\" * MAIN CONTENT STARTS HERE *
-+.\" -----------------------------------------------------------------
-+.SH "NAME"
-+nvme-netapp-ontapdevices \- Display information about ONTAP devices
-+.SH "SYNOPSIS"
-+.sp
-+.nf
-+\fInvme netapp ontapdevices\fR [\-o <fmt> | \-\-output\-format=<fmt>]
-+.fi
-+.SH "DESCRIPTION"
-+.sp
-+Display information about ONTAP devices on the host\&. The ONTAP devices are identified using the Identify Controller data\&.
-+.SH "OPTIONS"
-+.PP
-+\-o <fmt>, \-\-output\-format=<fmt>
-+.RS 4
-+Set the reporting format to
-+\fInormal\fR
-+(default),
-+\fIcolumn\fR, or
-+\fIjson\fR\&. Only one output format can be used at a time\&.
-+.RE
-+.SH "EXAMPLES"
-+.sp
-+.RS 4
-+.ie n \{\
-+\h'-04'\(bu\h'+03'\c
-+.\}
-+.el \{\
-+.sp -1
-+.IP \(bu 2.3
-+.\}
-+Display information, in a column\-based format, for ONTAP devices\&.
-+.sp
-+.if n \{\
-+.RS 4
-+.\}
-+.nf
-+# nvme netapp ontapdevices \-o column
-+.fi
-+.if n \{\
-+.RE
-+.\}
-+.RE
-+.SH "NVME"
-+.sp
-+Part of the nvme\-user suite
-diff --git a/Documentation/nvme-netapp-ontapdevices.html b/Documentation/nvme-netapp-ontapdevices.html
-new file mode 100644
-index 0000000..06ad9fb
---- /dev/null
-+++ b/Documentation/nvme-netapp-ontapdevices.html
-@@ -0,0 +1,814 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-+<head>
-+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-+<meta name="generator" content="AsciiDoc 8.6.10" />
-+<title>nvme-netapp-ontapdevices(1)</title>
-+<style type="text/css">
-+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
-+
-+/* Default font. */
-+body {
-+  font-family: Georgia,serif;
-+}
-+
-+/* Title font. */
-+h1, h2, h3, h4, h5, h6,
-+div.title, caption.title,
-+thead, p.table.header,
-+#toctitle,
-+#author, #revnumber, #revdate, #revremark,
-+#footer {
-+  font-family: Arial,Helvetica,sans-serif;
-+}
-+
-+body {
-+  margin: 1em 5% 1em 5%;
-+}
-+
-+a {
-+  color: blue;
-+  text-decoration: underline;
-+}
-+a:visited {
-+  color: fuchsia;
-+}
-+
-+em {
-+  font-style: italic;
-+  color: navy;
-+}
-+
-+strong {
-+  font-weight: bold;
-+  color: #083194;
-+}
-+
-+h1, h2, h3, h4, h5, h6 {
-+  color: #527bbd;
-+  margin-top: 1.2em;
-+  margin-bottom: 0.5em;
-+  line-height: 1.3;
-+}
-+
-+h1, h2, h3 {
-+  border-bottom: 2px solid silver;
-+}
-+h2 {
-+  padding-top: 0.5em;
-+}
-+h3 {
-+  float: left;
-+}
-+h3 + * {
-+  clear: left;
-+}
-+h5 {
-+  font-size: 1.0em;
-+}
-+
-+div.sectionbody {
-+  margin-left: 0;
-+}
-+
-+hr {
-+  border: 1px solid silver;
-+}
-+
-+p {
-+  margin-top: 0.5em;
-+  margin-bottom: 0.5em;
-+}
-+
-+ul, ol, li > p {
-+  margin-top: 0;
-+}
-+ul > li     { color: #aaa; }
-+ul > li > * { color: black; }
-+
-+.monospaced, code, pre {
-+  font-family: "Courier New", Courier, monospace;
-+  font-size: inherit;
-+  color: navy;
-+  padding: 0;
-+  margin: 0;
-+}
-+pre {
-+  white-space: pre-wrap;
-+}
-+
-+#author {
-+  color: #527bbd;
-+  font-weight: bold;
-+  font-size: 1.1em;
-+}
-+#email {
-+}
-+#revnumber, #revdate, #revremark {
-+}
-+
-+#footer {
-+  font-size: small;
-+  border-top: 2px solid silver;
-+  padding-top: 0.5em;
-+  margin-top: 4.0em;
-+}
-+#footer-text {
-+  float: left;
-+  padding-bottom: 0.5em;
-+}
-+#footer-badges {
-+  float: right;
-+  padding-bottom: 0.5em;
-+}
-+
-+#preamble {
-+  margin-top: 1.5em;
-+  margin-bottom: 1.5em;
-+}
-+div.imageblock, div.exampleblock, div.verseblock,
-+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
-+div.admonitionblock {
-+  margin-top: 1.0em;
-+  margin-bottom: 1.5em;
-+}
-+div.admonitionblock {
-+  margin-top: 2.0em;
-+  margin-bottom: 2.0em;
-+  margin-right: 10%;
-+  color: #606060;
-+}
-+
-+div.content { /* Block element content. */
-+  padding: 0;
-+}
-+
-+/* Block element titles. */
-+div.title, caption.title {
-+  color: #527bbd;
-+  font-weight: bold;
-+  text-align: left;
-+  margin-top: 1.0em;
-+  margin-bottom: 0.5em;
-+}
-+div.title + * {
-+  margin-top: 0;
-+}
-+
-+td div.title:first-child {
-+  margin-top: 0.0em;
-+}
-+div.content div.title:first-child {
-+  margin-top: 0.0em;
-+}
-+div.content + div.title {
-+  margin-top: 0.0em;
-+}
-+
-+div.sidebarblock > div.content {
-+  background: #ffffee;
-+  border: 1px solid #dddddd;
-+  border-left: 4px solid #f0f0f0;
-+  padding: 0.5em;
-+}
-+
-+div.listingblock > div.content {
-+  border: 1px solid #dddddd;
-+  border-left: 5px solid #f0f0f0;
-+  background: #f8f8f8;
-+  padding: 0.5em;
-+}
-+
-+div.quoteblock, div.verseblock {
-+  padding-left: 1.0em;
-+  margin-left: 1.0em;
-+  margin-right: 10%;
-+  border-left: 5px solid #f0f0f0;
-+  color: #888;
-+}
-+
-+div.quoteblock > div.attribution {
-+  padding-top: 0.5em;
-+  text-align: right;
-+}
-+
-+div.verseblock > pre.content {
-+  font-family: inherit;
-+  font-size: inherit;
-+}
-+div.verseblock > div.attribution {
-+  padding-top: 0.75em;
-+  text-align: left;
-+}
-+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
-+div.verseblock + div.attribution {
-+  text-align: left;
-+}
-+
-+div.admonitionblock .icon {
-+  vertical-align: top;
-+  font-size: 1.1em;
-+  font-weight: bold;
-+  text-decoration: underline;
-+  color: #527bbd;
-+  padding-right: 0.5em;
-+}
-+div.admonitionblock td.content {
-+  padding-left: 0.5em;
-+  border-left: 3px solid #dddddd;
-+}
-+
-+div.exampleblock > div.content {
-+  border-left: 3px solid #dddddd;
-+  padding-left: 0.5em;
-+}
-+
-+div.imageblock div.content { padding-left: 0; }
-+span.image img { border-style: none; vertical-align: text-bottom; }
-+a.image:visited { color: white; }
-+
-+dl {
-+  margin-top: 0.8em;
-+  margin-bottom: 0.8em;
-+}
-+dt {
-+  margin-top: 0.5em;
-+  margin-bottom: 0;
-+  font-style: normal;
-+  color: navy;
-+}
-+dd > *:first-child {
-+  margin-top: 0.1em;
-+}
-+
-+ul, ol {
-+    list-style-position: outside;
-+}
-+ol.arabic {
-+  list-style-type: decimal;
-+}
-+ol.loweralpha {
-+  list-style-type: lower-alpha;
-+}
-+ol.upperalpha {
-+  list-style-type: upper-alpha;
-+}
-+ol.lowerroman {
-+  list-style-type: lower-roman;
-+}
-+ol.upperroman {
-+  list-style-type: upper-roman;
-+}
-+
-+div.compact ul, div.compact ol,
-+div.compact p, div.compact p,
-+div.compact div, div.compact div {
-+  margin-top: 0.1em;
-+  margin-bottom: 0.1em;
-+}
-+
-+tfoot {
-+  font-weight: bold;
-+}
-+td > div.verse {
-+  white-space: pre;
-+}
-+
-+div.hdlist {
-+  margin-top: 0.8em;
-+  margin-bottom: 0.8em;
-+}
-+div.hdlist tr {
-+  padding-bottom: 15px;
-+}
-+dt.hdlist1.strong, td.hdlist1.strong {
-+  font-weight: bold;
-+}
-+td.hdlist1 {
-+  vertical-align: top;
-+  font-style: normal;
-+  padding-right: 0.8em;
-+  color: navy;
-+}
-+td.hdlist2 {
-+  vertical-align: top;
-+}
-+div.hdlist.compact tr {
-+  margin: 0;
-+  padding-bottom: 0;
-+}
-+
-+.comment {
-+  background: yellow;
-+}
-+
-+.footnote, .footnoteref {
-+  font-size: 0.8em;
-+}
-+
-+span.footnote, span.footnoteref {
-+  vertical-align: super;
-+}
-+
-+#footnotes {
-+  margin: 20px 0 20px 0;
-+  padding: 7px 0 0 0;
-+}
-+
-+#footnotes div.footnote {
-+  margin: 0 0 5px 0;
-+}
-+
-+#footnotes hr {
-+  border: none;
-+  border-top: 1px solid silver;
-+  height: 1px;
-+  text-align: left;
-+  margin-left: 0;
-+  width: 20%;
-+  min-width: 100px;
-+}
-+
-+div.colist td {
-+  padding-right: 0.5em;
-+  padding-bottom: 0.3em;
-+  vertical-align: top;
-+}
-+div.colist td img {
-+  margin-top: 0.3em;
-+}
-+
-+@media print {
-+  #footer-badges { display: none; }
-+}
-+
-+#toc {
-+  margin-bottom: 2.5em;
-+}
-+
-+#toctitle {
-+  color: #527bbd;
-+  font-size: 1.1em;
-+  font-weight: bold;
-+  margin-top: 1.0em;
-+  margin-bottom: 0.1em;
-+}
-+
-+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
-+  margin-top: 0;
-+  margin-bottom: 0;
-+}
-+div.toclevel2 {
-+  margin-left: 2em;
-+  font-size: 0.9em;
-+}
-+div.toclevel3 {
-+  margin-left: 4em;
-+  font-size: 0.9em;
-+}
-+div.toclevel4 {
-+  margin-left: 6em;
-+  font-size: 0.9em;
-+}
-+
-+span.aqua { color: aqua; }
-+span.black { color: black; }
-+span.blue { color: blue; }
-+span.fuchsia { color: fuchsia; }
-+span.gray { color: gray; }
-+span.green { color: green; }
-+span.lime { color: lime; }
-+span.maroon { color: maroon; }
-+span.navy { color: navy; }
-+span.olive { color: olive; }
-+span.purple { color: purple; }
-+span.red { color: red; }
-+span.silver { color: silver; }
-+span.teal { color: teal; }
-+span.white { color: white; }
-+span.yellow { color: yellow; }
-+
-+span.aqua-background { background: aqua; }
-+span.black-background { background: black; }
-+span.blue-background { background: blue; }
-+span.fuchsia-background { background: fuchsia; }
-+span.gray-background { background: gray; }
-+span.green-background { background: green; }
-+span.lime-background { background: lime; }
-+span.maroon-background { background: maroon; }
-+span.navy-background { background: navy; }
-+span.olive-background { background: olive; }
-+span.purple-background { background: purple; }
-+span.red-background { background: red; }
-+span.silver-background { background: silver; }
-+span.teal-background { background: teal; }
-+span.white-background { background: white; }
-+span.yellow-background { background: yellow; }
-+
-+span.big { font-size: 2em; }
-+span.small { font-size: 0.6em; }
-+
-+span.underline { text-decoration: underline; }
-+span.overline { text-decoration: overline; }
-+span.line-through { text-decoration: line-through; }
-+
-+div.unbreakable { page-break-inside: avoid; }
-+
-+
-+/*
-+ * xhtml11 specific
-+ *
-+ * */
-+
-+div.tableblock {
-+  margin-top: 1.0em;
-+  margin-bottom: 1.5em;
-+}
-+div.tableblock > table {
-+  border: 3px solid #527bbd;
-+}
-+thead, p.table.header {
-+  font-weight: bold;
-+  color: #527bbd;
-+}
-+p.table {
-+  margin-top: 0;
-+}
-+/* Because the table frame attribute is overriden by CSS in most browsers. */
-+div.tableblock > table[frame="void"] {
-+  border-style: none;
-+}
-+div.tableblock > table[frame="hsides"] {
-+  border-left-style: none;
-+  border-right-style: none;
-+}
-+div.tableblock > table[frame="vsides"] {
-+  border-top-style: none;
-+  border-bottom-style: none;
-+}
-+
-+
-+/*
-+ * html5 specific
-+ *
-+ * */
-+
-+table.tableblock {
-+  margin-top: 1.0em;
-+  margin-bottom: 1.5em;
-+}
-+thead, p.tableblock.header {
-+  font-weight: bold;
-+  color: #527bbd;
-+}
-+p.tableblock {
-+  margin-top: 0;
-+}
-+table.tableblock {
-+  border-width: 3px;
-+  border-spacing: 0px;
-+  border-style: solid;
-+  border-color: #527bbd;
-+  border-collapse: collapse;
-+}
-+th.tableblock, td.tableblock {
-+  border-width: 1px;
-+  padding: 4px;
-+  border-style: solid;
-+  border-color: #527bbd;
-+}
-+
-+table.tableblock.frame-topbot {
-+  border-left-style: hidden;
-+  border-right-style: hidden;
-+}
-+table.tableblock.frame-sides {
-+  border-top-style: hidden;
-+  border-bottom-style: hidden;
-+}
-+table.tableblock.frame-none {
-+  border-style: hidden;
-+}
-+
-+th.tableblock.halign-left, td.tableblock.halign-left {
-+  text-align: left;
-+}
-+th.tableblock.halign-center, td.tableblock.halign-center {
-+  text-align: center;
-+}
-+th.tableblock.halign-right, td.tableblock.halign-right {
-+  text-align: right;
-+}
-+
-+th.tableblock.valign-top, td.tableblock.valign-top {
-+  vertical-align: top;
-+}
-+th.tableblock.valign-middle, td.tableblock.valign-middle {
-+  vertical-align: middle;
-+}
-+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
-+  vertical-align: bottom;
-+}
-+
-+
-+/*
-+ * manpage specific
-+ *
-+ * */
-+
-+body.manpage h1 {
-+  padding-top: 0.5em;
-+  padding-bottom: 0.5em;
-+  border-top: 2px solid silver;
-+  border-bottom: 2px solid silver;
-+}
-+body.manpage h2 {
-+  border-style: none;
-+}
-+body.manpage div.sectionbody {
-+  margin-left: 3em;
-+}
-+
-+@media print {
-+  body.manpage div#toc { display: none; }
-+}
-+
-+
-+</style>
-+<script type="text/javascript">
-+/*<![CDATA[*/
-+var asciidoc = {  // Namespace.
-+
-+/////////////////////////////////////////////////////////////////////
-+// Table Of Contents generator
-+/////////////////////////////////////////////////////////////////////
-+
-+/* Author: Mihai Bazon, September 2002
-+ * http://students.infoiasi.ro/~mishoo
-+ *
-+ * Table Of Content generator
-+ * Version: 0.4
-+ *
-+ * Feel free to use this script under the terms of the GNU General Public
-+ * License, as long as you do not remove or alter this notice.
-+ */
-+
-+ /* modified by Troy D. Hanson, September 2006. License: GPL */
-+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
-+
-+// toclevels = 1..4.
-+toc: function (toclevels) {
-+
-+  function getText(el) {
-+    var text = "";
-+    for (var i = el.firstChild; i != null; i = i.nextSibling) {
-+      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
-+        text += i.data;
-+      else if (i.firstChild != null)
-+        text += getText(i);
-+    }
-+    return text;
-+  }
-+
-+  function TocEntry(el, text, toclevel) {
-+    this.element = el;
-+    this.text = text;
-+    this.toclevel = toclevel;
-+  }
-+
-+  function tocEntries(el, toclevels) {
-+    var result = new Array;
-+    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
-+    // Function that scans the DOM tree for header elements (the DOM2
-+    // nodeIterator API would be a better technique but not supported by all
-+    // browsers).
-+    var iterate = function (el) {
-+      for (var i = el.firstChild; i != null; i = i.nextSibling) {
-+        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
-+          var mo = re.exec(i.tagName);
-+          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
-+            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
-+          }
-+          iterate(i);
-+        }
-+      }
-+    }
-+    iterate(el);
-+    return result;
-+  }
-+
-+  var toc = document.getElementById("toc");
-+  if (!toc) {
-+    return;
-+  }
-+
-+  // Delete existing TOC entries in case we're reloading the TOC.
-+  var tocEntriesToRemove = [];
-+  var i;
-+  for (i = 0; i < toc.childNodes.length; i++) {
-+    var entry = toc.childNodes[i];
-+    if (entry.nodeName.toLowerCase() == 'div'
-+     && entry.getAttribute("class")
-+     && entry.getAttribute("class").match(/^toclevel/))
-+      tocEntriesToRemove.push(entry);
-+  }
-+  for (i = 0; i < tocEntriesToRemove.length; i++) {
-+    toc.removeChild(tocEntriesToRemove[i]);
-+  }
-+
-+  // Rebuild TOC entries.
-+  var entries = tocEntries(document.getElementById("content"), toclevels);
-+  for (var i = 0; i < entries.length; ++i) {
-+    var entry = entries[i];
-+    if (entry.element.id == "")
-+      entry.element.id = "_toc_" + i;
-+    var a = document.createElement("a");
-+    a.href = "#" + entry.element.id;
-+    a.appendChild(document.createTextNode(entry.text));
-+    var div = document.createElement("div");
-+    div.appendChild(a);
-+    div.className = "toclevel" + entry.toclevel;
-+    toc.appendChild(div);
-+  }
-+  if (entries.length == 0)
-+    toc.parentNode.removeChild(toc);
-+},
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+// Footnotes generator
-+/////////////////////////////////////////////////////////////////////
-+
-+/* Based on footnote generation code from:
-+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
-+ */
-+
-+footnotes: function () {
-+  // Delete existing footnote entries in case we're reloading the footnodes.
-+  var i;
-+  var noteholder = document.getElementById("footnotes");
-+  if (!noteholder) {
-+    return;
-+  }
-+  var entriesToRemove = [];
-+  for (i = 0; i < noteholder.childNodes.length; i++) {
-+    var entry = noteholder.childNodes[i];
-+    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
-+      entriesToRemove.push(entry);
-+  }
-+  for (i = 0; i < entriesToRemove.length; i++) {
-+    noteholder.removeChild(entriesToRemove[i]);
-+  }
-+
-+  // Rebuild footnote entries.
-+  var cont = document.getElementById("content");
-+  var spans = cont.getElementsByTagName("span");
-+  var refs = {};
-+  var n = 0;
-+  for (i=0; i<spans.length; i++) {
-+    if (spans[i].className == "footnote") {
-+      n++;
-+      var note = spans[i].getAttribute("data-note");
-+      if (!note) {
-+        // Use [\s\S] in place of . so multi-line matches work.
-+        // Because JavaScript has no s (dotall) regex flag.
-+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
-+        spans[i].innerHTML =
-+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
-+          "' title='View footnote' class='footnote'>" + n + "</a>]";
-+        spans[i].setAttribute("data-note", note);
-+      }
-+      noteholder.innerHTML +=
-+        "<div class='footnote' id='_footnote_" + n + "'>" +
-+        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
-+        n + "</a>. " + note + "</div>";
-+      var id =spans[i].getAttribute("id");
-+      if (id != null) refs["#"+id] = n;
-+    }
-+  }
-+  if (n == 0)
-+    noteholder.parentNode.removeChild(noteholder);
-+  else {
-+    // Process footnoterefs.
-+    for (i=0; i<spans.length; i++) {
-+      if (spans[i].className == "footnoteref") {
-+        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
-+        href = href.match(/#.*/)[0];  // Because IE return full URL.
-+        n = refs[href];
-+        spans[i].innerHTML =
-+          "[<a href='#_footnote_" + n +
-+          "' title='View footnote' class='footnote'>" + n + "</a>]";
-+      }
-+    }
-+  }
-+},
-+
-+install: function(toclevels) {
-+  var timerId;
-+
-+  function reinstall() {
-+    asciidoc.footnotes();
-+    if (toclevels) {
-+      asciidoc.toc(toclevels);
-+    }
-+  }
-+
-+  function reinstallAndRemoveTimer() {
-+    clearInterval(timerId);
-+    reinstall();
-+  }
-+
-+  timerId = setInterval(reinstall, 500);
-+  if (document.addEventListener)
-+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
-+  else
-+    window.onload = reinstallAndRemoveTimer;
-+}
-+
-+}
-+asciidoc.install();
-+/*]]>*/
-+</script>
-+</head>
-+<body class="manpage">
-+<div id="header">
-+<h1>
-+nvme-netapp-ontapdevices(1) Manual Page
-+</h1>
-+<h2>NAME</h2>
-+<div class="sectionbody">
-+<p>nvme-netapp-ontapdevices -
-+   Display information about ONTAP devices
-+</p>
-+</div>
-+</div>
-+<div id="content">
-+<div class="sect1">
-+<h2 id="_synopsis">SYNOPSIS</h2>
-+<div class="sectionbody">
-+<div class="verseblock">
-+<pre class="content"><em>nvme netapp ontapdevices</em> [-o &lt;fmt&gt; | --output-format=&lt;fmt&gt;]</pre>
-+<div class="attribution">
-+</div></div>
-+</div>
-+</div>
-+<div class="sect1">
-+<h2 id="_description">DESCRIPTION</h2>
-+<div class="sectionbody">
-+<div class="paragraph"><p>Display information about ONTAP devices on the host.
-+The ONTAP devices are identified using the Identify Controller data.</p></div>
-+</div>
-+</div>
-+<div class="sect1">
-+<h2 id="_options">OPTIONS</h2>
-+<div class="sectionbody">
-+<div class="dlist"><dl>
-+<dt class="hdlist1">
-+-o &lt;fmt&gt;
-+</dt>
-+<dt class="hdlist1">
-+--output-format=&lt;fmt&gt;
-+</dt>
-+<dd>
-+<p>
-+              Set the reporting format to <em>normal</em> (default), <em>column</em>, or
-+              <em>json</em>. Only one output format can be used at a time.
-+</p>
-+</dd>
-+</dl></div>
-+</div>
-+</div>
-+<div class="sect1">
-+<h2 id="_examples">EXAMPLES</h2>
-+<div class="sectionbody">
-+<div class="ulist"><ul>
-+<li>
-+<p>
-+Display information, in a column-based format, for ONTAP devices.
-+</p>
-+<div class="listingblock">
-+<div class="content">
-+<pre><code># nvme netapp ontapdevices -o column</code></pre>
-+</div></div>
-+</li>
-+</ul></div>
-+</div>
-+</div>
-+<div class="sect1">
-+<h2 id="_nvme">NVME</h2>
-+<div class="sectionbody">
-+<div class="paragraph"><p>Part of the nvme-user suite</p></div>
-+</div>
-+</div>
-+</div>
-+<div id="footnotes"><hr /></div>
-+<div id="footer">
-+<div id="footer-text">
-+Last updated
-+ 2018-11-29 13:36:56 GMT
-+</div>
-+</div>
-+</body>
-+</html>
-diff --git a/Documentation/nvme-netapp-ontapdevices.txt b/Documentation/nvme-netapp-ontapdevices.txt
-new file mode 100644
-index 0000000..09369f1
---- /dev/null
-+++ b/Documentation/nvme-netapp-ontapdevices.txt
-@@ -0,0 +1,35 @@
-+nvme-netapp-ontapdevices(1)
-+========================
-+
-+NAME
-+----
-+nvme-netapp-ontapdevices - Display information about ONTAP devices
-+
-+SYNOPSIS
-+--------
-+[verse]
-+'nvme netapp ontapdevices' [-o <fmt> | --output-format=<fmt>]
-+
-+DESCRIPTION
-+-----------
-+Display information about ONTAP devices on the host. The ONTAP devices are
-+are identified using the Identify Controller data.
-+
-+OPTIONS
-+-------
-+-o <fmt>::
-+--output-format=<fmt>::
-+              Set the reporting format to 'normal' (default), 'column', or
-+              'json'. Only one output format can be used at a time.
-+
-+EXAMPLES
-+--------
-+* Display information, in a column-based format, for ONTAP devices.
-++
-+------------
-+# nvme netapp ontapdevices -o column
-+------------
-+
-+NVME
-+----
-+Part of the nvme-user suite
diff --git a/SOURCES/nvme-cli-fix-cflags-param-patch b/SOURCES/nvme-cli-fix-cflags-param-patch
deleted file mode 100644
index 7eb11f2..0000000
--- a/SOURCES/nvme-cli-fix-cflags-param-patch
+++ /dev/null
@@ -1,34 +0,0 @@
-commit 254bcd6b23436fd929e18c935322410b541ca121
-Author: Breno Leitao <leitao@debian.org>
-Date:   Mon Jan 21 07:03:24 2019 -0500
-
-    Fix CFLAGS parameter
-    
-    Currently nvme-cli 1.7 is not compiling on Debian because the Debian helper
-    (compilation toolkit) does pass a CFLAGS variable, thus, avoiding the
-    initial definition (CFLAGS ?= -O2 -g -Wall -Werror -I.)
-    
-    The problem is that -I should not be removed, otherwise the code does not
-    compile, with the following bug:
-    
-            cc -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D__CHECK_ENDIAN__ -g -O2 -fdebug-prefix-map=/home/breno/nvme/nvme-cli-1.7=. -fstack-protector-strong -Wformat -Werror=format-security -std=gnu99 -DLIBUUID -DNVME_VERSION='"1.7"' -o plugins/intel/intel-nvme.o -c plugins/intel/intel-nvme.c
-            plugins/intel/intel-nvme.c:10:18: fatal error: nvme.h: No such file or directory
-            compilation terminated.
-    
-    This patch just moves the -I parameter to part of the CFLAGS that is not
-    replaced by dh's CFLAGS.
-    
-    Signed-off-by: Breno Leitao <leitao@debian.org>
-
-diff --git a/Makefile b/Makefile
-index 525616a..3a4e223 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,5 +1,5 @@
--CFLAGS ?= -O2 -g -Wall -Werror -I.
--CFLAGS += -std=gnu99
-+CFLAGS ?= -O2 -g -Wall -Werror
-+CFLAGS += -std=gnu99 -I.
- CPPFLAGS += -D_GNU_SOURCE -D__CHECK_ENDIAN__
- LIBUUID = $(shell $(LD) -o /dev/null -luuid >/dev/null 2>&1; echo $$?)
- NVME = nvme
diff --git a/SOURCES/nvme-cli-fix-typo-rem-dup-are-patch b/SOURCES/nvme-cli-fix-typo-rem-dup-are-patch
deleted file mode 100644
index c147705..0000000
--- a/SOURCES/nvme-cli-fix-typo-rem-dup-are-patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit 0c2fef91167a8a18b00a295cc6111fd874c8aa22
-Author: Simon Schricker <sschricker@suse.de>
-Date:   Thu Apr 11 11:23:16 2019 +0200
-
-    nvme-cli: fix typo, removing the duplicate 'are'
-    
-    Signed-off-by: Simon Schricker <sschricker@suse.de>
-
-diff --git a/Documentation/nvme-netapp-ontapdevices.txt b/Documentation/nvme-netapp-ontapdevices.txt
-index 8eaa73f..c292758 100644
---- a/Documentation/nvme-netapp-ontapdevices.txt
-+++ b/Documentation/nvme-netapp-ontapdevices.txt
-@@ -13,7 +13,7 @@ SYNOPSIS
- DESCRIPTION
- -----------
- Display information about ONTAP devices on the host. The ONTAP devices are
--are identified using the Identify Controller data.
-+identified using the Identify Controller data.
- 
- OPTIONS
- -------
diff --git a/SOURCES/nvme-cli-fix-typo-removing-dup-are-patch b/SOURCES/nvme-cli-fix-typo-removing-dup-are-patch
new file mode 100644
index 0000000..c147705
--- /dev/null
+++ b/SOURCES/nvme-cli-fix-typo-removing-dup-are-patch
@@ -0,0 +1,21 @@
+commit 0c2fef91167a8a18b00a295cc6111fd874c8aa22
+Author: Simon Schricker <sschricker@suse.de>
+Date:   Thu Apr 11 11:23:16 2019 +0200
+
+    nvme-cli: fix typo, removing the duplicate 'are'
+    
+    Signed-off-by: Simon Schricker <sschricker@suse.de>
+
+diff --git a/Documentation/nvme-netapp-ontapdevices.txt b/Documentation/nvme-netapp-ontapdevices.txt
+index 8eaa73f..c292758 100644
+--- a/Documentation/nvme-netapp-ontapdevices.txt
++++ b/Documentation/nvme-netapp-ontapdevices.txt
+@@ -13,7 +13,7 @@ SYNOPSIS
+ DESCRIPTION
+ -----------
+ Display information about ONTAP devices on the host. The ONTAP devices are
+-are identified using the Identify Controller data.
++identified using the Identify Controller data.
+ 
+ OPTIONS
+ -------
diff --git a/SOURCES/nvme-cli-refactor-plugins-file-dir-patch b/SOURCES/nvme-cli-refactor-plugins-file-dir-patch
deleted file mode 100644
index 605ae4a..0000000
--- a/SOURCES/nvme-cli-refactor-plugins-file-dir-patch
+++ /dev/null
@@ -1,287 +0,0 @@
-commit f3921810fe1e28491c62bca1d6d9ca02d99eda3f
-Author: Eyal Ben David <eyalbe@il.ibm.com>
-Date:   Wed Oct 24 18:08:16 2018 +0300
-
-    Refactor plugins in a file hierarchy
-
-diff --git a/Makefile b/Makefile
-index 433bc41..70541cb 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,4 +1,4 @@
--CFLAGS ?= -O2 -g -Wall -Werror
-+CFLAGS ?= -O2 -g -Wall -Werror -I.
- CFLAGS += -std=gnu99
- CPPFLAGS += -D_GNU_SOURCE -D__CHECK_ENDIAN__
- LIBUUID = $(shell $(LD) -o /dev/null -luuid >/dev/null 2>&1; echo $$?)
-@@ -32,18 +32,31 @@ override CFLAGS += -DNVME_VERSION='"$(NVME_VERSION)"'
- NVME_DPKG_VERSION=1~`lsb_release -sc`
- 
- OBJS := argconfig.o suffix.o parser.o nvme-print.o nvme-ioctl.o \
--	nvme-lightnvm.o fabrics.o json.o plugin.o intel-nvme.o \
--	lnvm-nvme.o memblaze-nvme.o wdc-nvme.o wdc-utils.o nvme-models.o \
--	huawei-nvme.o netapp-nvme.o  toshiba-nvme.o micron-nvme.o seagate-nvme.o
--
--nvme: nvme.c nvme.h $(OBJS) NVME-VERSION-FILE
--	$(CC) $(CPPFLAGS) $(CFLAGS) nvme.c -o $(NVME) $(OBJS) $(LDFLAGS)
-+	nvme-lightnvm.o fabrics.o json.o nvme-models.o plugin.o
-+
-+PLUGIN_OBJS :=					\
-+	plugins/intel/intel-nvme.o		\
-+	plugins/lnvm/lnvm-nvme.o		\
-+	plugins/memblaze/memblaze-nvme.o	\
-+	plugins/wdc/wdc-nvme.o			\
-+	plugins/wdc/wdc-utils.o			\
-+	plugins/huawei/huawei-nvme.o		\
-+	plugins/netapp/netapp-nvme.o		\
-+	plugins/toshiba/toshiba-nvme.o		\
-+	plugins/micron/micron-nvme.o		\
-+	plugins/seagate/seagate-nvme.o
-+
-+nvme: nvme.c nvme.h $(OBJS) $(PLUGIN_OBJS) NVME-VERSION-FILE
-+	$(CC) $(CPPFLAGS) $(CFLAGS) nvme.c -o $(NVME) $(OBJS) $(PLUGIN_OBJS) $(LDFLAGS)
-+
-+verify-no-dep: nvme.c nvme.h $(OBJS) NVME-VERSION-FILE
-+	$(CC) $(CPPFLAGS) $(CFLAGS) nvme.c -o $@ $(OBJS) $(LDFLAGS)
- 
- nvme.o: nvme.c nvme.h nvme-print.h nvme-ioctl.h argconfig.h suffix.h nvme-lightnvm.h fabrics.h
- 	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
- 
- %.o: %.c %.h nvme.h linux/nvme_ioctl.h nvme-ioctl.h nvme-print.h argconfig.h
--	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
-+	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
- 
- doc: $(NVME)
- 	$(MAKE) -C Documentation
-@@ -54,9 +67,10 @@ test:
- all: doc
- 
- clean:
--	$(RM) $(NVME) *.o *~ a.out NVME-VERSION-FILE *.tar* nvme.spec version control nvme-*.deb
-+	$(RM) $(NVME) $(OBJS) $(PLUGIN_OBJS) *~ a.out NVME-VERSION-FILE *.tar* nvme.spec version control nvme-*.deb
- 	$(MAKE) -C Documentation clean
- 	$(RM) tests/*.pyc
-+	$(RM) verify-no-dep
- 
- clobber: clean
- 	$(MAKE) -C Documentation clobber
-diff --git a/huawei-nvme.c b/plugins/huawei/huawei-nvme.c
-similarity index 100%
-rename from huawei-nvme.c
-rename to plugins/huawei/huawei-nvme.c
-diff --git a/huawei-nvme.h b/plugins/huawei/huawei-nvme.h
-similarity index 88%
-rename from huawei-nvme.h
-rename to plugins/huawei/huawei-nvme.h
-index 91e8dfb..7aac90c 100644
---- a/huawei-nvme.h
-+++ b/plugins/huawei/huawei-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE huawei-nvme
-+#define CMD_INC_FILE plugins/huawei/huawei-nvme
- 
- #if !defined(HUAWEI_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define HUAWEI_NVME
-diff --git a/intel-nvme.c b/plugins/intel/intel-nvme.c
-similarity index 100%
-rename from intel-nvme.c
-rename to plugins/intel/intel-nvme.c
-diff --git a/intel-nvme.h b/plugins/intel/intel-nvme.h
-similarity index 94%
-rename from intel-nvme.h
-rename to plugins/intel/intel-nvme.h
-index 5e6af0b..6d70efa 100644
---- a/intel-nvme.h
-+++ b/plugins/intel/intel-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE intel-nvme
-+#define CMD_INC_FILE plugins/intel/intel-nvme
- 
- #if !defined(INTEL_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define INTEL_NVME
-diff --git a/lnvm-nvme.c b/plugins/lnvm/lnvm-nvme.c
-similarity index 100%
-rename from lnvm-nvme.c
-rename to plugins/lnvm/lnvm-nvme.c
-diff --git a/lnvm-nvme.h b/plugins/lnvm/lnvm-nvme.h
-similarity index 95%
-rename from lnvm-nvme.h
-rename to plugins/lnvm/lnvm-nvme.h
-index 293ec8f..3d5cbc5 100644
---- a/lnvm-nvme.h
-+++ b/plugins/lnvm/lnvm-nvme.h
-@@ -1,6 +1,6 @@
- 
- #undef CMD_INC_FILE
--#define CMD_INC_FILE lnvm-nvme
-+#define CMD_INC_FILE plugins/lnvm/lnvm-nvme
- 
- #if !defined(LNVM_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define LNVM_NVME
-diff --git a/memblaze-nvme.c b/plugins/memblaze/memblaze-nvme.c
-similarity index 100%
-rename from memblaze-nvme.c
-rename to plugins/memblaze/memblaze-nvme.c
-diff --git a/memblaze-nvme.h b/plugins/memblaze/memblaze-nvme.h
-similarity index 91%
-rename from memblaze-nvme.h
-rename to plugins/memblaze/memblaze-nvme.h
-index 82a0449..528285e 100644
---- a/memblaze-nvme.h
-+++ b/plugins/memblaze/memblaze-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE memblaze-nvme
-+#define CMD_INC_FILE plugins/memblaze/memblaze-nvme
- 
- #if !defined(MEMBLAZE_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define MEMBLAZE_NVME
-diff --git a/micron-nvme.c b/plugins/micron/micron-nvme.c
-similarity index 100%
-rename from micron-nvme.c
-rename to plugins/micron/micron-nvme.c
-diff --git a/micron-nvme.h b/plugins/micron/micron-nvme.h
-similarity index 86%
-rename from micron-nvme.h
-rename to plugins/micron/micron-nvme.h
-index 4054933..43e720c 100644
---- a/micron-nvme.h
-+++ b/plugins/micron/micron-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE micron-nvme
-+#define CMD_INC_FILE plugins/micron/micron-nvme
- 
- #if !defined(MICRON_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define MICRON_NVME
-diff --git a/netapp-nvme.c b/plugins/netapp/netapp-nvme.c
-similarity index 100%
-rename from netapp-nvme.c
-rename to plugins/netapp/netapp-nvme.c
-diff --git a/netapp-nvme.h b/plugins/netapp/netapp-nvme.h
-similarity index 85%
-rename from netapp-nvme.h
-rename to plugins/netapp/netapp-nvme.h
-index 6e3324c..3dd019e 100644
---- a/netapp-nvme.h
-+++ b/plugins/netapp/netapp-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE netapp-nvme
-+#define CMD_INC_FILE plugins/netapp/netapp-nvme
- 
- #if !defined(NETAPP_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define NETAPP_NVME
-diff --git a/seagate-diag.h b/plugins/seagate/seagate-diag.h
-old mode 100755
-new mode 100644
-similarity index 100%
-rename from seagate-diag.h
-rename to plugins/seagate/seagate-diag.h
-diff --git a/seagate-nvme.c b/plugins/seagate/seagate-nvme.c
-old mode 100755
-new mode 100644
-similarity index 100%
-rename from seagate-nvme.c
-rename to plugins/seagate/seagate-nvme.c
-diff --git a/seagate-nvme.h b/plugins/seagate/seagate-nvme.h
-old mode 100755
-new mode 100644
-similarity index 63%
-rename from seagate-nvme.h
-rename to plugins/seagate/seagate-nvme.h
-index bcf19d3..2a00e77
---- a/seagate-nvme.h
-+++ b/plugins/seagate/seagate-nvme.h
-@@ -4,7 +4,7 @@
- // Copyright (c) 2017-2018 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
- //
- // ******************************************************************************************
--// 
-+//
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the GNU General Public License
- // as published by the Free Software Foundation; either version 2
-@@ -17,9 +17,9 @@
- //
- // \file seagate-nvme.h
- // \brief This file defines the functions and macros to make building a nvme-cli seagate plug-in.
-- 
-+
- #undef CMD_INC_FILE
--#define CMD_INC_FILE seagate-nvme
-+#define CMD_INC_FILE plugins/seagate/seagate-nvme
- 
- #if !defined(SEAGATE_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define SEAGATE_NVME
-@@ -28,15 +28,15 @@
- 
- PLUGIN(NAME("seagate", "Seagate vendor specific extensions"),
- 	COMMAND_LIST(
--		ENTRY("vs-temperature-stats",      "Retrieve Seagate temperature statistics ",             temp_stats)		
--		ENTRY("vs-log-page-sup",    "Retrieve Seagate Supported Log-pages Information ", log_pages_supp)		
--        ENTRY("vs-smart-add-log",       "Retrieve Seagate extended-SMART Information ",         vs_smart_log)		
--		ENTRY("vs-pcie-stats",      "Retrieve Seagate PCIe error statistics ", vs_pcie_error_log)		
--        ENTRY("clear-pcie-correctable-errors",      "Clear Seagate PCIe error statistics  ",             vs_clr_pcie_correctable_errs)
--        ENTRY("get-host-tele",       "Retrieve Seagate Host-Initiated Telemetry ",          get_host_tele)
--        ENTRY("get-ctrl-tele",       "Retrieve Seagate Controller-Initiated Telemetry ",    get_ctrl_tele)
--        ENTRY("vs-internal-log",       "Retrieve Seagate Controller-Initiated Telemetry in binary format",  vs_internal_log)		
--		ENTRY("plugin-version",     "Shows Seagate plugin's version information ", seagate_plugin_version)		
-+		ENTRY("vs-temperature-stats",      "Retrieve Seagate temperature statistics ",             temp_stats)
-+		ENTRY("vs-log-page-sup",    "Retrieve Seagate Supported Log-pages Information ", log_pages_supp)
-+		ENTRY("vs-smart-add-log",       "Retrieve Seagate extended-SMART Information ",         vs_smart_log)
-+		ENTRY("vs-pcie-stats",      "Retrieve Seagate PCIe error statistics ", vs_pcie_error_log)
-+		ENTRY("clear-pcie-correctable-errors",      "Clear Seagate PCIe error statistics  ",             vs_clr_pcie_correctable_errs)
-+		ENTRY("get-host-tele",       "Retrieve Seagate Host-Initiated Telemetry ",          get_host_tele)
-+		ENTRY("get-ctrl-tele",       "Retrieve Seagate Controller-Initiated Telemetry ",    get_ctrl_tele)
-+		ENTRY("vs-internal-log",       "Retrieve Seagate Controller-Initiated Telemetry in binary format",  vs_internal_log)
-+		ENTRY("plugin-version",     "Shows Seagate plugin's version information ", seagate_plugin_version)
- 	)
- );
- 
-diff --git a/toshiba-nvme.c b/plugins/toshiba/toshiba-nvme.c
-similarity index 100%
-rename from toshiba-nvme.c
-rename to plugins/toshiba/toshiba-nvme.c
-diff --git a/toshiba-nvme.h b/plugins/toshiba/toshiba-nvme.h
-similarity index 90%
-rename from toshiba-nvme.h
-rename to plugins/toshiba/toshiba-nvme.h
-index cecbbf3..c405e78 100644
---- a/toshiba-nvme.h
-+++ b/plugins/toshiba/toshiba-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE toshiba-nvme
-+#define CMD_INC_FILE plugins/toshiba/toshiba-nvme
- 
- #if !defined(TOSHIBA_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define TOSHIBA_NVME
-diff --git a/wdc-nvme.c b/plugins/wdc/wdc-nvme.c
-similarity index 100%
-rename from wdc-nvme.c
-rename to plugins/wdc/wdc-nvme.c
-diff --git a/wdc-nvme.h b/plugins/wdc/wdc-nvme.h
-similarity index 95%
-rename from wdc-nvme.h
-rename to plugins/wdc/wdc-nvme.h
-index 3732005..c2d892b 100644
---- a/wdc-nvme.h
-+++ b/plugins/wdc/wdc-nvme.h
-@@ -1,5 +1,5 @@
- #undef CMD_INC_FILE
--#define CMD_INC_FILE wdc-nvme
-+#define CMD_INC_FILE plugins/wdc/wdc-nvme
- 
- #if !defined(WDC_NVME) || defined(CMD_HEADER_MULTI_READ)
- #define WDC_NVME
-diff --git a/wdc-utils.c b/plugins/wdc/wdc-utils.c
-similarity index 100%
-rename from wdc-utils.c
-rename to plugins/wdc/wdc-utils.c
-diff --git a/wdc-utils.h b/plugins/wdc/wdc-utils.h
-similarity index 100%
-rename from wdc-utils.h
-rename to plugins/wdc/wdc-utils.h
diff --git a/SOURCES/nvme-cli-regen-docs-patch b/SOURCES/nvme-cli-regen-docs-patch
new file mode 100644
index 0000000..5c8ddd4
--- /dev/null
+++ b/SOURCES/nvme-cli-regen-docs-patch
@@ -0,0 +1,153 @@
+commit 87438229b1dbbbce599cf24a820665abc571a5dc
+Author: Keith Busch <keith.busch@intel.com>
+Date:   Mon Apr 15 08:38:14 2019 -0600
+
+    Regen docs
+    
+    Signed-off-by: Keith Busch <keith.busch@intel.com>
+
+diff --git a/Documentation/nvme-connect-all.1 b/Documentation/nvme-connect-all.1
+index 07fa229..2d79d41 100644
+--- a/Documentation/nvme-connect-all.1
++++ b/Documentation/nvme-connect-all.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-connect-all
+ .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-CONNECT\-ALL" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-CONNECT\-ALL" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+diff --git a/Documentation/nvme-connect.1 b/Documentation/nvme-connect.1
+index 2b2b80d..2e20942 100644
+--- a/Documentation/nvme-connect.1
++++ b/Documentation/nvme-connect.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-connect
+ .\"    Author: [see the "AUTHORS" section]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-CONNECT" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-CONNECT" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+diff --git a/Documentation/nvme-disconnect.1 b/Documentation/nvme-disconnect.1
+index 450484e..8ab10c8 100644
+--- a/Documentation/nvme-disconnect.1
++++ b/Documentation/nvme-disconnect.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-disconnect
+ .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-DISCONNECT" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-DISCONNECT" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+diff --git a/Documentation/nvme-discover.1 b/Documentation/nvme-discover.1
+index 57e0804..04f13a7 100644
+--- a/Documentation/nvme-discover.1
++++ b/Documentation/nvme-discover.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-discover
+ .\"    Author: [see the "AUTHORS" section]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-DISCOVER" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-DISCOVER" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+diff --git a/Documentation/nvme-netapp-ontapdevices.1 b/Documentation/nvme-netapp-ontapdevices.1
+index 94c4ac2..b74b7db 100644
+--- a/Documentation/nvme-netapp-ontapdevices.1
++++ b/Documentation/nvme-netapp-ontapdevices.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-netapp-ontapdevices
+ .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-NETAPP\-ONTAPD" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-NETAPP\-ONTAPD" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
+@@ -36,7 +36,7 @@ nvme-netapp-ontapdevices \- Display information about ONTAP devices
+ .fi
+ .SH "DESCRIPTION"
+ .sp
+-Display information about ONTAP devices on the host\&. The ONTAP devices are are identified using the Identify Controller data\&.
++Display information about ONTAP devices on the host\&. The ONTAP devices are identified using the Identify Controller data\&.
+ .SH "OPTIONS"
+ .PP
+ \-o <fmt>, \-\-output\-format=<fmt>
+diff --git a/Documentation/nvme-netapp-ontapdevices.html b/Documentation/nvme-netapp-ontapdevices.html
+index 7bf1ca0..29f4bda 100644
+--- a/Documentation/nvme-netapp-ontapdevices.html
++++ b/Documentation/nvme-netapp-ontapdevices.html
+@@ -755,7 +755,7 @@ nvme-netapp-ontapdevices(1) Manual Page
+ <h2 id="_description">DESCRIPTION</h2>
+ <div class="sectionbody">
+ <div class="paragraph"><p>Display information about ONTAP devices on the host. The ONTAP devices are
+-are identified using the Identify Controller data.</p></div>
++identified using the Identify Controller data.</p></div>
+ </div>
+ </div>
+ <div class="sect1">
+@@ -803,7 +803,7 @@ Display information, in a column-based format, for ONTAP devices.
+ <div id="footnotes"><hr /></div>
+ <div id="footer">
+ <div id="footer-text">
+-Last updated 2019-04-08 14:49:24 MDT
++Last updated 2019-04-15 08:37:59 MDT
+ </div>
+ </div>
+ </body>
+diff --git a/Documentation/nvme-show-regs.1 b/Documentation/nvme-show-regs.1
+index 4372d82..327bf9d 100644
+--- a/Documentation/nvme-show-regs.1
++++ b/Documentation/nvme-show-regs.1
+@@ -2,12 +2,12 @@
+ .\"     Title: nvme-id-ns
+ .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+-.\"      Date: 04/08/2019
++.\"      Date: 04/15/2019
+ .\"    Manual: NVMe Manual
+ .\"    Source: NVMe
+ .\"  Language: English
+ .\"
+-.TH "NVME\-ID\-NS" "1" "04/08/2019" "NVMe" "NVMe Manual"
++.TH "NVME\-ID\-NS" "1" "04/15/2019" "NVMe" "NVMe Manual"
+ .\" -----------------------------------------------------------------
+ .\" * Define some portability stuff
+ .\" -----------------------------------------------------------------
diff --git a/SOURCES/nvme-ioctl-fix-double-free-in-a-loop-of-get-property-patch b/SOURCES/nvme-ioctl-fix-double-free-in-a-loop-of-get-property-patch
new file mode 100644
index 0000000..2a77544
--- /dev/null
+++ b/SOURCES/nvme-ioctl-fix-double-free-in-a-loop-of-get-property-patch
@@ -0,0 +1,30 @@
+commit d16e1d2784a48c9b25e58a0e821c737670c6cdc8
+Author: Minwoo Im <minwoo.im@samsung.com>
+Date:   Wed Apr 24 01:46:29 2019 +0100
+
+    ioctl: Fix double-free in a loop of get_property
+    
+    As it was reported, *pbar could be double-freed in case
+    get_property_helper() fails in the middle of the loop.
+    
+    This issue was reported by Ken Heitke on:
+      https://github.com/linux-nvme/nvme-cli/pull/471
+    
+    Signed-off-by: Minwoo Im <minwoo.im@samsung.com>
+
+diff --git a/nvme-ioctl.c b/nvme-ioctl.c
+index 4cf7aeb..16fdc66 100644
+--- a/nvme-ioctl.c
++++ b/nvme-ioctl.c
+@@ -626,8 +626,10 @@ int nvme_get_properties(int fd, void **pbar)
+ 		err = get_property_helper(fd, offset, *pbar + offset, &advance);
+ 		if (!err)
+ 			ret = 0;
+-		else
++		else {
+ 			free(*pbar);
++			break;
++		}
+ 	}
+ 
+ 	return ret;
diff --git a/SOURCES/nvme-ioctl-fix-wrong-ret-case-of-get-prop-patch b/SOURCES/nvme-ioctl-fix-wrong-ret-case-of-get-prop-patch
new file mode 100644
index 0000000..43ddfd0
--- /dev/null
+++ b/SOURCES/nvme-ioctl-fix-wrong-ret-case-of-get-prop-patch
@@ -0,0 +1,44 @@
+commit 5b7506198a6872764a51e32363e219916e1e592e
+Author: Minwoo Im <minwoo.im@samsung.com>
+Date:   Wed Apr 24 01:48:58 2019 +0100
+
+    ioctl: Fix wrong return case of get_property
+    
+    If get_property_helper() succeeds in the first time, and then fails in
+    the next time, then the ret value will not be updated to an error value.
+    This patch removes 'ret' variable to make 'err' to return being updated
+    everytime get_property_helper() invoked.
+    
+    Signed-off-by: Minwoo Im <minwoo.im@samsung.com>
+
+diff --git a/nvme-ioctl.c b/nvme-ioctl.c
+index 16fdc66..75bf9fa 100644
+--- a/nvme-ioctl.c
++++ b/nvme-ioctl.c
+@@ -612,7 +612,7 @@ int nvme_get_property(int fd, int offset, uint64_t *value)
+ int nvme_get_properties(int fd, void **pbar)
+ {
+ 	int offset, advance;
+-	int err, ret = -EINVAL;
++	int err;
+ 	int size = getpagesize();
+ 
+ 	*pbar = malloc(size);
+@@ -624,15 +624,13 @@ int nvme_get_properties(int fd, void **pbar)
+ 	memset(*pbar, 0xff, size);
+ 	for (offset = NVME_REG_CAP; offset <= NVME_REG_CMBSZ; offset += advance) {
+ 		err = get_property_helper(fd, offset, *pbar + offset, &advance);
+-		if (!err)
+-			ret = 0;
+-		else {
++		if (err) {
+ 			free(*pbar);
+ 			break;
+ 		}
+ 	}
+ 
+-	return ret;
++	return err;
+ }
+ 
+ int nvme_set_property(int fd, int offset, int value)
diff --git a/SPECS/nvme-cli.spec b/SPECS/nvme-cli.spec
index c6b7aa6..b1b8b25 100644
--- a/SPECS/nvme-cli.spec
+++ b/SPECS/nvme-cli.spec
@@ -2,8 +2,8 @@
 #%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
 
 Name:           nvme-cli
-Version:        1.6
-Release:        4%{?dist}
+Version:        1.8.1
+Release:        3%{?dist}
 Summary:        NVMe management command line interface
 
 License:        GPLv2+
@@ -11,11 +11,10 @@ URL:            https://github.com/linux-nvme/nvme-cli
 #Source0:        https://github.com/linux-nvme/%{name}/archive/%{commit0}.tar.gz
 Source0:        https://github.com/linux-nvme/%{name}/archive/v%{version}.tar.gz
 
-Patch0:         nvme-cli-refactor-plugins-file-dir-patch
-Patch1:         nvme-cli-add-netapp-ontapdev-command-patch 
-Patch2:         nvme-cli-add-netapp-ontapdev-man-page-patch
-Patch3:         nvme-cli-fix-typo-rem-dup-are-patch
-Patch4:         nvme-cli-fix-cflags-param-patch
+Patch0:         nvme-cli-fix-typo-removing-dup-are-patch
+Patch1:         nvme-cli-regen-docs-patch
+Patch2:         nvme-ioctl-fix-double-free-in-a-loop-of-get-property-patch 
+Patch3:         nvme-ioctl-fix-wrong-ret-case-of-get-prop-patch
 
 BuildRequires:	libuuid-devel
 BuildRequires:	gcc
@@ -30,15 +29,17 @@ nvme-cli provides NVM-Express user space tooling for Linux.
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
-%patch4 -p1
-
 
 %build
+# NB: the -I. part works around a bug fixed up stream by commit 254bcd6b2343
+# ("Fix CFLAGS parameter").  Rather than patching the fix in, I just added
+# an extra -I.  In the next release, we should be able to drop this hack.
 make PREFIX=/usr CFLAGS="%{optflags} -std=c99 -I." LDFLAGS="%{__global_ldflags}" %{?_smp_mflags}
 
 
 %install
 %make_install PREFIX=/usr
+mkdir -p %{buildroot}%{_sysconfdir}/nvme
 
 
 %files
@@ -46,7 +47,9 @@ make PREFIX=/usr CFLAGS="%{optflags} -std=c99 -I." LDFLAGS="%{__global_ldflags}"
 %doc README.md
 %{_sbindir}/nvme
 %{_mandir}/man1/nvme*.gz
-%{_datadir}/bash_completion.d/nvme
+%{_datadir}/bash-completion/completions/nvme
+%{_datadir}/zsh/site-functions/_nvme
+%dir %{_sysconfdir}/nvme
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -73,6 +76,23 @@ if [ -d /etc/nvme ]; then
 fi
 
 %changelog
+* Tue May 08 2019 dmilburn@redhat.com - 1.8.1-3
+- Fix show_regs over RDMA with get_prop fix.
+
+* Mon Apr 29 2019 dmilburn@redhat.com - 1.8.1-2
+- Fix show_regs with upstream ioctl fix.
+
+* Mon Apr 15 2019 luto@kernel.org - 1.8.1-1
+- Update to 1.8.1-1.
+- Remove a build hack.
+
+* Sun Feb 24 2019 luto@kernel.org - 1.7-2
+- Create /etc/nvme
+
+* Sun Feb 24 2019 luto@kernel.org - 1.7-1
+- Bump to 1.7
+- Clean up some trivial rpmlint complaints
+
 * Tue Oct 16 2018 dmilburn@redhat.com - 1.6-2
 - Pull in upstream fixes