Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2018-01-12 15:59:27 +0100
committerTakashi Iwai <tiwai@suse.de>2018-01-12 15:59:27 +0100
commit7b8dd8ea6a3c5b47ec9ff84c6c78fdd4fe5c0d2a (patch)
treefe271472554f8c3940ea3e403ef3cf45e6fc0f64
parentb13f43af2631272d3d449a83d5ffd6a676ad819d (diff)
parent0e5402c9dc3ff10489b8e5c387749f125e445079 (diff)
Merge branch 'users/jthumshirn/SLE15/for-next' into SLE15
-rw-r--r--patches.drivers/block-Provide-blk_status_t-decoding-for-path-errors.patch59
-rw-r--r--patches.drivers/dm-mpath-Use-blk_path_error.patch63
-rw-r--r--patches.drivers/nvme-Add-more-command-status-translation.patch44
-rw-r--r--patches.drivers/nvme-multipath-Consult-blk_status_t-for-failover.patch128
-rw-r--r--patches.drivers/nvme-multipath-Use-blk_path_error.patch44
-rwxr-xr-xscripts/git_sort/git_sort.py1
-rw-r--r--series.conf7
7 files changed, 346 insertions, 0 deletions
diff --git a/patches.drivers/block-Provide-blk_status_t-decoding-for-path-errors.patch b/patches.drivers/block-Provide-blk_status_t-decoding-for-path-errors.patch
new file mode 100644
index 0000000000..4f3c908333
--- /dev/null
+++ b/patches.drivers/block-Provide-blk_status_t-decoding-for-path-errors.patch
@@ -0,0 +1,59 @@
+From: Keith Busch <keith.busch@intel.com>
+Date: Tue, 9 Jan 2018 12:04:16 -0700
+Subject: block: Provide blk_status_t decoding for path errors
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.dk/linux-block
+Git-commit: 9111e5686c8cf3905191d4feb819acd874437500
+References: FATE#323952, FATE#322506
+
+This patch provides a common decoder for block status path related errors
+that may be retried so various entities wishing to consult this do not
+have to duplicate this decision.
+
+Acked-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Hannes Reinecke <hare@suse.com>
+Signed-off-by: Keith Busch <keith.busch@intel.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ include/linux/blk_types.h | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+--- a/include/linux/blk_types.h
++++ b/include/linux/blk_types.h
+@@ -38,6 +38,34 @@ typedef u8 __bitwise blk_status_t;
+
+ #define BLK_STS_AGAIN ((__force blk_status_t)12)
+
++/**
++ * blk_path_error - returns true if error may be path related
++ * @error: status the request was completed with
++ *
++ * Description:
++ * This classifies block error status into non-retryable errors and ones
++ * that may be successful if retried on a failover path.
++ *
++ * Return:
++ * %false - retrying failover path will not help
++ * %true - may succeed if retried
++ */
++static inline bool blk_path_error(blk_status_t error)
++{
++ switch (error) {
++ case BLK_STS_NOTSUPP:
++ case BLK_STS_NOSPC:
++ case BLK_STS_TARGET:
++ case BLK_STS_NEXUS:
++ case BLK_STS_MEDIUM:
++ case BLK_STS_PROTECTION:
++ return false;
++ }
++
++ /* Anything else could be a path failure, so should be retried */
++ return true;
++}
++
+ struct blk_issue_stat {
+ u64 stat;
+ };
diff --git a/patches.drivers/dm-mpath-Use-blk_path_error.patch b/patches.drivers/dm-mpath-Use-blk_path_error.patch
new file mode 100644
index 0000000000..96e5aa266f
--- /dev/null
+++ b/patches.drivers/dm-mpath-Use-blk_path_error.patch
@@ -0,0 +1,63 @@
+From: Keith Busch <keith.busch@intel.com>
+Date: Tue, 9 Jan 2018 12:04:18 -0700
+Subject: dm mpath: Use blk_path_error
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.dk/linux-block
+Git-commit: a1275677f8cd060bb8824fda66781d431560c714
+References: FATE#323952, FATE#322506
+
+Uses common code for determining if an error should be retried on
+alternate path.
+
+Acked-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Hannes Reinecke <hare@suse.com>
+Signed-off-by: Keith Busch <keith.busch@intel.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ drivers/md/dm-mpath.c | 19 ++-----------------
+ 1 file changed, 2 insertions(+), 17 deletions(-)
+
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -1449,21 +1449,6 @@ static void activate_path_work(struct wo
+ activate_or_offline_path(pgpath);
+ }
+
+-static int noretry_error(blk_status_t error)
+-{
+- switch (error) {
+- case BLK_STS_NOTSUPP:
+- case BLK_STS_NOSPC:
+- case BLK_STS_TARGET:
+- case BLK_STS_NEXUS:
+- case BLK_STS_MEDIUM:
+- return 1;
+- }
+-
+- /* Anything else could be a path failure, so should be retried */
+- return 0;
+-}
+-
+ static int multipath_end_io(struct dm_target *ti, struct request *clone,
+ blk_status_t error, union map_info *map_context)
+ {
+@@ -1482,7 +1467,7 @@ static int multipath_end_io(struct dm_ta
+ * request into dm core, which will remake a clone request and
+ * clone bios for it and resubmit it later.
+ */
+- if (error && !noretry_error(error)) {
++ if (error && blk_path_error(error)) {
+ struct multipath *m = ti->private;
+
+ r = DM_ENDIO_REQUEUE;
+@@ -1518,7 +1503,7 @@ static int multipath_end_io_bio(struct d
+ unsigned long flags;
+ int r = DM_ENDIO_DONE;
+
+- if (!*error || noretry_error(*error))
++ if (!*error || !blk_path_error(*error))
+ goto done;
+
+ if (pgpath)
diff --git a/patches.drivers/nvme-Add-more-command-status-translation.patch b/patches.drivers/nvme-Add-more-command-status-translation.patch
new file mode 100644
index 0000000000..17f008d5fd
--- /dev/null
+++ b/patches.drivers/nvme-Add-more-command-status-translation.patch
@@ -0,0 +1,44 @@
+From: Keith Busch <keith.busch@intel.com>
+Date: Tue, 9 Jan 2018 12:04:14 -0700
+Subject: nvme: Add more command status translation
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.dk/linux-block
+Git-commit: e96fef2c3fa396dda680e943dddaa4f2a06e7b1c
+References: FATE#323952, FATE#322506
+
+This adds more NVMe status code translations to blk_status_t values,
+and captures all the current status codes NVMe multipath uses.
+
+Acked-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Hannes Reinecke <hare@suse.com>
+Signed-off-by: Keith Busch <keith.busch@intel.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ drivers/nvme/host/core.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -157,13 +157,20 @@ static blk_status_t nvme_error_status(st
+ return BLK_STS_OK;
+ case NVME_SC_CAP_EXCEEDED:
+ return BLK_STS_NOSPC;
++ case NVME_SC_LBA_RANGE:
++ return BLK_STS_TARGET;
++ case NVME_SC_BAD_ATTRIBUTES:
+ case NVME_SC_ONCS_NOT_SUPPORTED:
++ case NVME_SC_INVALID_OPCODE:
++ case NVME_SC_INVALID_FIELD:
++ case NVME_SC_INVALID_NS:
+ return BLK_STS_NOTSUPP;
+ case NVME_SC_WRITE_FAULT:
+ case NVME_SC_READ_ERROR:
+ case NVME_SC_UNWRITTEN_BLOCK:
+ case NVME_SC_ACCESS_DENIED:
+ case NVME_SC_READ_ONLY:
++ case NVME_SC_COMPARE_FAILED:
+ return BLK_STS_MEDIUM;
+ case NVME_SC_GUARD_CHECK:
+ case NVME_SC_APPTAG_CHECK:
diff --git a/patches.drivers/nvme-multipath-Consult-blk_status_t-for-failover.patch b/patches.drivers/nvme-multipath-Consult-blk_status_t-for-failover.patch
new file mode 100644
index 0000000000..19e461bb34
--- /dev/null
+++ b/patches.drivers/nvme-multipath-Consult-blk_status_t-for-failover.patch
@@ -0,0 +1,128 @@
+From: Keith Busch <keith.busch@intel.com>
+Date: Tue, 9 Jan 2018 12:04:15 -0700
+Subject: nvme/multipath: Consult blk_status_t for failover
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.dk/linux-block
+Git-commit: 908e45643d6450551bfbdbad3f088d4bd1f1c1fb
+References: FATE#323952, FATE#322506
+
+This removes nvme multipath's specific status decoding to see if failover
+is needed, using the generic blk_status_t that was decoded earlier. This
+abstraction from the raw NVMe status means all status decoding exists
+in one place.
+
+Acked-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Hannes Reinecke <hare@suse.com>
+Signed-off-by: Keith Busch <keith.busch@intel.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ drivers/nvme/host/core.c | 9 ++++----
+ drivers/nvme/host/multipath.c | 44 +++++++-----------------------------------
+ drivers/nvme/host/nvme.h | 5 ++--
+ 3 files changed, 16 insertions(+), 42 deletions(-)
+
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -197,8 +197,10 @@ static inline bool nvme_req_needs_retry(
+
+ void nvme_complete_rq(struct request *req)
+ {
+- if (unlikely(nvme_req(req)->status && nvme_req_needs_retry(req))) {
+- if (nvme_req_needs_failover(req)) {
++ blk_status_t status = nvme_error_status(req);
++
++ if (unlikely(status != BLK_STS_OK && nvme_req_needs_retry(req))) {
++ if (nvme_req_needs_failover(req, status)) {
+ nvme_failover_req(req);
+ return;
+ }
+@@ -209,8 +211,7 @@ void nvme_complete_rq(struct request *re
+ return;
+ }
+ }
+-
+- blk_mq_end_request(req, nvme_error_status(req));
++ blk_mq_end_request(req, status);
+ }
+ EXPORT_SYMBOL_GPL(nvme_complete_rq);
+
+--- a/drivers/nvme/host/multipath.c
++++ b/drivers/nvme/host/multipath.c
+@@ -33,46 +33,18 @@ void nvme_failover_req(struct request *r
+ kblockd_schedule_work(&ns->head->requeue_work);
+ }
+
+-bool nvme_req_needs_failover(struct request *req)
++bool nvme_req_needs_failover(struct request *req, blk_status_t error)
+ {
+ if (!(req->cmd_flags & REQ_NVME_MPATH))
+ return false;
+
+- switch (nvme_req(req)->status & 0x7ff) {
+- /*
+- * Generic command status:
+- */
+- case NVME_SC_INVALID_OPCODE:
+- case NVME_SC_INVALID_FIELD:
+- case NVME_SC_INVALID_NS:
+- case NVME_SC_LBA_RANGE:
+- case NVME_SC_CAP_EXCEEDED:
+- case NVME_SC_RESERVATION_CONFLICT:
+- return false;
+-
+- /*
+- * I/O command set specific error. Unfortunately these values are
+- * reused for fabrics commands, but those should never get here.
+- */
+- case NVME_SC_BAD_ATTRIBUTES:
+- case NVME_SC_INVALID_PI:
+- case NVME_SC_READ_ONLY:
+- case NVME_SC_ONCS_NOT_SUPPORTED:
+- WARN_ON_ONCE(nvme_req(req)->cmd->common.opcode ==
+- nvme_fabrics_command);
+- return false;
+-
+- /*
+- * Media and Data Integrity Errors:
+- */
+- case NVME_SC_WRITE_FAULT:
+- case NVME_SC_READ_ERROR:
+- case NVME_SC_GUARD_CHECK:
+- case NVME_SC_APPTAG_CHECK:
+- case NVME_SC_REFTAG_CHECK:
+- case NVME_SC_COMPARE_FAILED:
+- case NVME_SC_ACCESS_DENIED:
+- case NVME_SC_UNWRITTEN_BLOCK:
++ switch (error) {
++ case BLK_STS_NOTSUPP:
++ case BLK_STS_NOSPC:
++ case BLK_STS_TARGET:
++ case BLK_STS_NEXUS:
++ case BLK_STS_MEDIUM:
++ case BLK_STS_PROTECTION:
+ return false;
+ }
+
+--- a/drivers/nvme/host/nvme.h
++++ b/drivers/nvme/host/nvme.h
+@@ -400,7 +400,7 @@ extern const struct block_device_operati
+
+ #ifdef CONFIG_NVME_MULTIPATH
+ void nvme_failover_req(struct request *req);
+-bool nvme_req_needs_failover(struct request *req);
++bool nvme_req_needs_failover(struct request *req, blk_status_t error);
+ void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl);
+ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl,struct nvme_ns_head *head);
+ void nvme_mpath_add_disk(struct nvme_ns_head *head);
+@@ -429,7 +429,8 @@ static inline void nvme_mpath_check_last
+ static inline void nvme_failover_req(struct request *req)
+ {
+ }
+-static inline bool nvme_req_needs_failover(struct request *req)
++static inline bool nvme_req_needs_failover(struct request *req,
++ blk_status_t error)
+ {
+ return false;
+ }
diff --git a/patches.drivers/nvme-multipath-Use-blk_path_error.patch b/patches.drivers/nvme-multipath-Use-blk_path_error.patch
new file mode 100644
index 0000000000..1fc3514369
--- /dev/null
+++ b/patches.drivers/nvme-multipath-Use-blk_path_error.patch
@@ -0,0 +1,44 @@
+From: Keith Busch <keith.busch@intel.com>
+Date: Tue, 9 Jan 2018 12:04:17 -0700
+Subject: nvme/multipath: Use blk_path_error
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.dk/linux-block
+Git-commit: e1f425e770d21a34f51d7284e55f3fa984f8e275
+References: FATE#323952, FATE#322506
+
+Uses common code for determining if an error should be retried on
+alternate path.
+
+Acked-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Hannes Reinecke <hare@suse.com>
+Signed-off-by: Keith Busch <keith.busch@intel.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ drivers/nvme/host/multipath.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+--- a/drivers/nvme/host/multipath.c
++++ b/drivers/nvme/host/multipath.c
+@@ -37,19 +37,7 @@ bool nvme_req_needs_failover(struct requ
+ {
+ if (!(req->cmd_flags & REQ_NVME_MPATH))
+ return false;
+-
+- switch (error) {
+- case BLK_STS_NOTSUPP:
+- case BLK_STS_NOSPC:
+- case BLK_STS_TARGET:
+- case BLK_STS_NEXUS:
+- case BLK_STS_MEDIUM:
+- case BLK_STS_PROTECTION:
+- return false;
+- }
+-
+- /* Everything else could be a path failure, so should be retried */
+- return true;
++ return blk_path_error(error);
+ }
+
+ void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl)
diff --git a/scripts/git_sort/git_sort.py b/scripts/git_sort/git_sort.py
index ef8c2d4256..949283c717 100755
--- a/scripts/git_sort/git_sort.py
+++ b/scripts/git_sort/git_sort.py
@@ -178,6 +178,7 @@ remotes = (
Head(RepoURL("klassert/ipsec.git")),
Head(RepoURL("klassert/ipsec-next.git")),
Head(RepoURL("mkp/scsi.git"), "4.15/scsi-fixes"),
+ Head(RepoURL("git://git.kernel.dk/linux-block.git"), "for-next")
)
diff --git a/series.conf b/series.conf
index 6a22c08e66..565275699d 100644
--- a/series.conf
+++ b/series.conf
@@ -6499,6 +6499,13 @@
# git://git.infradead.org/nvme.git nvme-4.16
patches.drivers/nvmet-fc-cleanup-nvmet-add_port-remove_port.patch
+ # git://git.kernel.dk/linux-block.git for-next
+ patches.drivers/nvme-Add-more-command-status-translation.patch
+ patches.drivers/nvme-multipath-Consult-blk_status_t-for-failover.patch
+ patches.drivers/block-Provide-blk_status_t-decoding-for-path-errors.patch
+ patches.drivers/nvme-multipath-Use-blk_path_error.patch
+ patches.drivers/dm-mpath-Use-blk_path_error.patch
+
# out-of-tree patches
patches.drivers/s390-sles15-00-04-04-kmsg-add-VNIC-Characteristics-msg-documentation.patch
patches.suse/blk-timeout-no-round