diff --git a/.gitignore b/.gitignore
index f196bae..ddd9229 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/v1.8.1.tar.gz
+SOURCES/v1.9.tar.gz
diff --git a/.nvme-cli.metadata b/.nvme-cli.metadata
index e375033..c9775d8 100644
--- a/.nvme-cli.metadata
+++ b/.nvme-cli.metadata
@@ -1 +1 @@
-349affaf735fe14a8f8f4f48238d357d712aba40 SOURCES/v1.8.1.tar.gz
+e3604335030f745be0a7276c4f9064e31916714e SOURCES/v1.9.tar.gz
diff --git a/SOURCES/fix-systemd-service-script-use-connect-args-patch b/SOURCES/fix-systemd-service-script-use-connect-args-patch
new file mode 100644
index 0000000..1af4f2b
--- /dev/null
+++ b/SOURCES/fix-systemd-service-script-use-connect-args-patch
@@ -0,0 +1,24 @@
+commit 57315578d9e500dae5143dbda607dcadc933c545
+Author: James Smart <jsmart2021@gmail.com>
+Date:   Tue Jan 7 10:02:57 2020 -0700
+
+    Fix systemd service script use of CONNECT_ARGS env var
+    
+    In testing, some environments are not properly expanding CONNECT_ARGS.
+    
+    Change systemd service file use of CONNECT_ARGS to be encapsulated by
+    apostrophes and parens.
+    
+    Signed-off-by: James Smart <jsmart2021@gmail.com>
+    Signed-off-by: Keith Busch <kbusch@kernel.org>
+
+diff --git a/nvmf-autoconnect/systemd/nvmf-connect@.service b/nvmf-autoconnect/systemd/nvmf-connect@.service
+index 10fb3aa..c60f146 100644
+--- a/nvmf-autoconnect/systemd/nvmf-connect@.service
++++ b/nvmf-autoconnect/systemd/nvmf-connect@.service
+@@ -11,4 +11,4 @@ Requires=nvmf-connect.target
+ [Service]
+ Type=simple
+ Environment="CONNECT_ARGS=%i"
+-ExecStart=/bin/sh -c "nvme connect-all --quiet `/bin/echo -e $CONNECT_ARGS`"
++ExecStart=/bin/sh -c "nvme connect-all --quiet `/bin/echo -e '${CONNECT_ARGS}'`"
diff --git a/SOURCES/nvme-cli-check-sysfs-interface-before-nvme-disc-patch b/SOURCES/nvme-cli-check-sysfs-interface-before-nvme-disc-patch
new file mode 100644
index 0000000..55e2932
--- /dev/null
+++ b/SOURCES/nvme-cli-check-sysfs-interface-before-nvme-disc-patch
@@ -0,0 +1,22 @@
+commit ca9a2ec103003d1377c45d49452c457194ad27db
+Author: Simon Schricker <sschricker@suse.de>
+Date:   Fri Nov 29 10:52:05 2019 +0100
+
+    nvme-cli: Check for sysfs interface before NVMe discovery
+    
+    This prevents an unnecessary error message in the case that the nvme-fc
+    kernel module is not loaded and the
+      /sys/class/fc/fc_udev_device/nvme_discovery
+    handle is not available.
+
+diff --git a/nvmf-autoconnect/systemd/nvmefc-boot-connections.service b/nvmf-autoconnect/systemd/nvmefc-boot-connections.service
+index 84f6486..33ab8c1 100644
+--- a/nvmf-autoconnect/systemd/nvmefc-boot-connections.service
++++ b/nvmf-autoconnect/systemd/nvmefc-boot-connections.service
+@@ -1,5 +1,6 @@
+ [Unit]
+ Description=Auto-connect to subsystems on FC-NVME devices found during boot
++ConditionPathExists=/sys/class/fc/fc_udev_device/nvme_discovery
+ 
+ [Service]
+ Type=oneshot
diff --git a/SOURCES/nvme-cli-fix-typo-removing-dup-are-patch b/SOURCES/nvme-cli-fix-typo-removing-dup-are-patch
deleted file mode 100644
index c147705..0000000
--- a/SOURCES/nvme-cli-fix-typo-removing-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-regen-docs-patch b/SOURCES/nvme-cli-regen-docs-patch
deleted file mode 100644
index 5c8ddd4..0000000
--- a/SOURCES/nvme-cli-regen-docs-patch
+++ /dev/null
@@ -1,153 +0,0 @@
-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
deleted file mode 100644
index 2a77544..0000000
--- a/SOURCES/nvme-ioctl-fix-double-free-in-a-loop-of-get-property-patch
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index 43ddfd0..0000000
--- a/SOURCES/nvme-ioctl-fix-wrong-ret-case-of-get-prop-patch
+++ /dev/null
@@ -1,44 +0,0 @@
-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/SOURCES/nvmf-autoconnect-add-udev-rules-to-set-iopolicy-netapp-patch b/SOURCES/nvmf-autoconnect-add-udev-rules-to-set-iopolicy-netapp-patch
new file mode 100644
index 0000000..f5eb19b
--- /dev/null
+++ b/SOURCES/nvmf-autoconnect-add-udev-rules-to-set-iopolicy-netapp-patch
@@ -0,0 +1,15 @@
+commit 6eafcf96f315d6ae7be5fa8332131c4cc487d5df
+Author: Simon Schricker <sschricker@suse.de>
+Date:   Tue Dec 17 10:49:35 2019 +0100
+
+    nvmf-autoconnect: add udev rules to set iopolicy for certain NetApp devices
+
+diff --git a/nvmf-autoconnect/udev-rules/71-nvmf-iopolicy-netapp.rules b/nvmf-autoconnect/udev-rules/71-nvmf-iopolicy-netapp.rules
+new file mode 100644
+index 0000000..aefd9d4
+--- /dev/null
++++ b/nvmf-autoconnect/udev-rules/71-nvmf-iopolicy-netapp.rules
+@@ -0,0 +1,3 @@
++# Enable round-robin for NetApp ONTAP and NetApp E-Series
++ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin"
++ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{model}=="NetApp E-Series", ATTR{iopolicy}="round-robin"
diff --git a/SOURCES/nvmf-autoconnect-fix-abls-path-systemctl-patch b/SOURCES/nvmf-autoconnect-fix-abls-path-systemctl-patch
new file mode 100644
index 0000000..af2c88d
--- /dev/null
+++ b/SOURCES/nvmf-autoconnect-fix-abls-path-systemctl-patch
@@ -0,0 +1,27 @@
+commit 177d12ec112ab370d91b7129a33d2da43b809203
+Author: Sagi Grimberg <sagi@grimberg.me>
+Date:   Thu Aug 22 15:09:36 2019 -0700
+
+    nvmf-autoconnect: fix absolute path for systemctl
+    
+    Without the absolute path udev gets the error:
+    failed to execute '/lib/udev/systemctl' 'systemctl --no-block start nvmf-connect@[...].service': No such file or directory
+    
+    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
+
+diff --git a/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules
+index 789a2c8..c909fb0 100644
+--- a/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules
++++ b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules
+@@ -9,9 +9,9 @@
+ ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_EVENT}=="discovery",\
+   ENV{NVME_CTRL_NAME}=="*", ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \
+   ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", \
+-  RUN+="systemctl --no-block start nvmf-connect@--device=$env{NVME_CTRL_NAME}\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}.service"
++  RUN+="/bin/systemctl --no-block start nvmf-connect@--device=$env{NVME_CTRL_NAME}\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}.service"
+ 
+ # nvme-fc transport generated events (old-style for compatibility)
+ ACTION=="change", SUBSYSTEM=="fc", ENV{FC_EVENT}=="nvmediscovery", \
+   ENV{NVMEFC_HOST_TRADDR}=="*",  ENV{NVMEFC_TRADDR}=="*", \
+-  RUN+="systemctl --no-block start nvmf-connect@--device=none\t--transport=fc\t--traddr=$env{NVMEFC_TRADDR}\t--trsvcid=none\t--host-traddr=$env{NVMEFC_HOST_TRADDR}.service"
++  RUN+="/bin/systemctl --no-block start nvmf-connect@--device=none\t--transport=fc\t--traddr=$env{NVMEFC_TRADDR}\t--trsvcid=none\t--host-traddr=$env{NVMEFC_HOST_TRADDR}.service"
diff --git a/SOURCES/systemd-fix-echo-call-with-absolute-path-patch b/SOURCES/systemd-fix-echo-call-with-absolute-path-patch
new file mode 100644
index 0000000..0ddc6a7
--- /dev/null
+++ b/SOURCES/systemd-fix-echo-call-with-absolute-path-patch
@@ -0,0 +1,59 @@
+commit 0451499b82813b6aefa30519bdd26459a6dd7c58
+Author: Sagi Grimberg <sagi@grimberg.me>
+Date:   Thu Aug 22 15:09:37 2019 -0700
+
+    systemd: fix echo call with absolute path
+    
+    Without placing the absolute path when formatting the
+    nvme connect-all args we can get the following error:
+    --
+    connect-all: unrecognized option '-e'
+    Discover NVMeoF subsystems and connect to them  [  --transport=<LIST>, -t <LIST> ]    --- transport type
+      [  --traddr=<LIST>, -a <LIST> ]       --- transport address
+      [  --trsvcid=<LIST>, -s <LIST> ]      --- transport service id (e.g. IP
+                                                port)
+      [  --host-traddr=<LIST>, -w <LIST> ]  --- host traddr (e.g. FC WWN's)
+      [  --hostnqn=<LIST>, -q <LIST> ]      --- user-defined hostnqn (if default
+                                                not used)
+      [  --hostid=<LIST>, -I <LIST> ]       --- user-defined hostid (if default
+                                                not used)
+      [  --raw=<LIST>, -r <LIST> ]          --- raw output file
+      [  --device=<LIST>, -d <LIST> ]       --- use existing discovery controller
+                                                device
+      [  --keep-alive-tmo=<LIST>, -k <LIST> ] --- keep alive timeout period in
+                                                seconds
+      [  --reconnect-delay=<LIST>, -c <LIST> ] --- reconnect timeout period in
+                                                seconds
+      [  --ctrl-loss-tmo=<LIST>, -l <LIST> ] --- controller loss timeout period in
+                                                seconds
+      [  --hdr_digest, -g ]                 --- enable transport protocol header
+                                                digest (TCP transport)
+      [  --data_digest, -G ]                --- enable transport protocol data
+                                                digest (TCP transport)
+      [  --nr-io-queues=<LIST>, -i <LIST> ] --- number of io queues to use
+                                                (default is core count)
+      [  --nr-write-queues=<LIST>, -W <LIST> ] --- number of write queues to use
+                                                (default 0)
+      [  --nr-poll-queues=<LIST>, -P <LIST> ] --- number of poll queues to use
+                                                (default 0)
+      [  --queue-size=<LIST>, -Q <LIST> ]   --- number of io queue elements to
+                                                use (default 128)
+      [  --persistent, -p ]                 --- persistent discovery connection
+      [  --quiet, -Q ]                      --- suppress already connected errors
+    Usage: nvme connect-all <device> [OPTIONS]
+    Options:
+    : nvmf-connect@--device\x3dnvme0\t--transport\x3dtcp\t--traddr\x3d192.168.123.1\t--trsvcid\x3d8009\t--host-traddr\x3dnone.service: Main process exited, code=exited, status=70/n/a
+    : nvmf-connect@--device\x3dnvme0\t--transport\x3dtcp\t--traddr\x3d192.168.123.1\t--trsvcid\x3d8009\t--host-traddr\x3dnone.service: Failed with result 'exit-code'.
+    
+    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
+
+diff --git a/nvmf-autoconnect/systemd/nvmf-connect@.service b/nvmf-autoconnect/systemd/nvmf-connect@.service
+index 25dca0e..10fb3aa 100644
+--- a/nvmf-autoconnect/systemd/nvmf-connect@.service
++++ b/nvmf-autoconnect/systemd/nvmf-connect@.service
+@@ -11,4 +11,4 @@ Requires=nvmf-connect.target
+ [Service]
+ Type=simple
+ Environment="CONNECT_ARGS=%i"
+-ExecStart=/bin/sh -c "nvme connect-all --quiet `echo -e $CONNECT_ARGS`"
++ExecStart=/bin/sh -c "nvme connect-all --quiet `/bin/echo -e $CONNECT_ARGS`"
diff --git a/SPECS/nvme-cli.spec b/SPECS/nvme-cli.spec
index b1b8b25..af26392 100644
--- a/SPECS/nvme-cli.spec
+++ b/SPECS/nvme-cli.spec
@@ -1,46 +1,58 @@
-#%global commit0 bdbb4da0979fbdc079cf98410cdb31cf799e83b3
-#%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
+#%%global commit0 bdbb4da0979fbdc079cf98410cdb31cf799e83b3
+#%%global shortcommit0 %%(c=%%{commit0}; echo ${c:0:7})
 
 Name:           nvme-cli
-Version:        1.8.1
-Release:        3%{?dist}
+Version:        1.9
+Release:        5%{?dist}
 Summary:        NVMe management command line interface
 
 License:        GPLv2+
 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/%%{commit0}.tar.gz
 Source0:        https://github.com/linux-nvme/%{name}/archive/v%{version}.tar.gz
 
-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
+Patch0:         nvmf-autoconnect-fix-abls-path-systemctl-patch
+Patch1:         systemd-fix-echo-call-with-absolute-path-patch
+Patch2:         nvme-cli-check-sysfs-interface-before-nvme-disc-patch
+Patch3:         nvmf-autoconnect-add-udev-rules-to-set-iopolicy-netapp-patch
+Patch4:         fix-systemd-service-script-use-connect-args-patch
 
-BuildRequires:	libuuid-devel
-BuildRequires:	gcc
+BuildRequires:  libuuid-devel
+BuildRequires:  gcc
+BuildRequires:  systemd
 
 %description
 nvme-cli provides NVM-Express user space tooling for Linux.
 
 %prep
-#%setup -qn %{name}-%{commit0}
-%setup
+#%%setup -qn %%{name}-%%{commit0}
+%setup -q
 %patch0 -p1
 %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}
+
+# CFLAGS on the command line breaks the build.  It works okay as an
+# environment variable, though.  See:
+# https://github.com/linux-nvme/nvme-cli/pull/480
+CFLAGS="%{optflags}" make PREFIX=/usr LDFLAGS="%{__global_ldflags}" %{?_smp_mflags}
 
 
 %install
-%make_install PREFIX=/usr
+%make_install PREFIX=/usr UDEVDIR="%{_udevrulesdir}/.." SYSTEMDDIR="%{_unitdir}/.."
 mkdir -p %{buildroot}%{_sysconfdir}/nvme
 
+# hostid and hostnqn are supposed to be unique per machine.  We obviously
+# can't package them.
+# rm -f %{buildroot}%{_sysconfdir}/nvme/hostid
+# rm -f %{buildroot}%{_sysconfdir}/nvme/hostnqn
+
+# Do not install the dracut rule yet.  See rhbz 1742764
+rm -f %{buildroot}/usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf
+
 
 %files
 %license LICENSE
@@ -50,37 +62,41 @@ mkdir -p %{buildroot}%{_sysconfdir}/nvme
 %{_datadir}/bash-completion/completions/nvme
 %{_datadir}/zsh/site-functions/_nvme
 %dir %{_sysconfdir}/nvme
-
-%clean
-rm -rf $RPM_BUILD_ROOT
+%{_sysconfdir}/nvme/hostnqn
+%{_sysconfdir}/nvme/hostid
+%{_sysconfdir}/nvme/discovery.conf
+%{_unitdir}/nvmefc-boot-connections.service
+%{_unitdir}/nvmf-connect.target
+%{_unitdir}/nvmf-connect@.service
+%{_udevrulesdir}/70-nvmf-autoconnect.rules
+%{_udevrulesdir}/71-nvmf-iopolicy-netapp.rules
+
+# Do not install the dracut rule yet.  See rhbz 1742764
+# /usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf
 
 %post
-if [ $1 = 1 ]; then # 1 : This package is being installed for the first time
-	if [ ! -f /etc/nvme/hostnqn ]; then
-		install -D /dev/null /etc/nvme/hostnqn
-		echo $(nvme gen-hostnqn) > /etc/nvme/hostnqn
-		chmod 644 /etc/nvme/hostnqn
+if [ $1 -eq 1 ]; then # 1 : This package is being installed for the first time
+	if [ ! -s %{_sysconfdir}/nvme/hostnqn ]; then
+		echo $(nvme gen-hostnqn) > %{_sysconfdir}/nvme/hostnqn
         fi
-        if [ ! -f /etc/nvme/hostid ]; then
-                uuidgen > /etc/nvme/hostid
+        if [ ! -s %{_sysconfdir}/nvme/hostid ]; then
+                uuidgen > %{_sysconfdir}/nvme/hostid
         fi
-fi
 
-%preun
-if [ -d /etc/nvme ]; then
-	rm -f /etc/nvme/hostnqn
-	rm -f /etc/nvme/hostid
-	if [ ! -n "`ls -A /etc/nvme`" ]; then
-		rm -rf /etc/nvme
-	fi
+	# apply udev and systemd changes that we did
+	systemctl enable nvmefc-boot-connections
+	systemctl daemon-reload
+	udevadm control --reload-rules && udevadm trigger
 fi
 
 %changelog
-* Tue May 08 2019 dmilburn@redhat.com - 1.8.1-3
-- Fix show_regs over RDMA with get_prop fix.
+* Wed Oct 02 2019 luto@kernel.org - 1.9-1
+- Update to 1.9
+- Certain fabric functionality may not work yet due to missing dracut
+  support and missing hostid and hostnqn configuration.
 
-* Mon Apr 29 2019 dmilburn@redhat.com - 1.8.1-2
-- Fix show_regs with upstream ioctl fix.
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.8.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
 
 * Mon Apr 15 2019 luto@kernel.org - 1.8.1-1
 - Update to 1.8.1-1.
@@ -93,8 +109,8 @@ fi
 - Bump to 1.7
 - Clean up some trivial rpmlint complaints
 
-* Tue Oct 16 2018 dmilburn@redhat.com - 1.6-2
-- Pull in upstream fixes
+* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
 
 * Tue Jul 24 2018 luto@kernel.org - 1.6-1
 - Update to 1.6