diff options
| -rw-r--r-- | drivers/nvme/host/core.c | 1 | ||||
| -rw-r--r-- | drivers/nvme/host/nvme.h | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 961d6a4af19c..839650e0926a 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c | |||
| @@ -2991,6 +2991,7 @@ static void nvme_ns_remove(struct nvme_ns *ns) | |||
| 2991 | mutex_unlock(&ns->ctrl->namespaces_mutex); | 2991 | mutex_unlock(&ns->ctrl->namespaces_mutex); |
| 2992 | 2992 | ||
| 2993 | synchronize_srcu(&ns->head->srcu); | 2993 | synchronize_srcu(&ns->head->srcu); |
| 2994 | nvme_mpath_check_last_path(ns); | ||
| 2994 | nvme_put_ns(ns); | 2995 | nvme_put_ns(ns); |
| 2995 | } | 2996 | } |
| 2996 | 2997 | ||
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ea1aa5283e8e..a00eabd06427 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h | |||
| @@ -417,6 +417,15 @@ static inline void nvme_mpath_clear_current_path(struct nvme_ns *ns) | |||
| 417 | rcu_assign_pointer(head->current_path, NULL); | 417 | rcu_assign_pointer(head->current_path, NULL); |
| 418 | } | 418 | } |
| 419 | struct nvme_ns *nvme_find_path(struct nvme_ns_head *head); | 419 | struct nvme_ns *nvme_find_path(struct nvme_ns_head *head); |
| 420 | |||
| 421 | static inline void nvme_mpath_check_last_path(struct nvme_ns *ns) | ||
| 422 | { | ||
| 423 | struct nvme_ns_head *head = ns->head; | ||
| 424 | |||
| 425 | if (head->disk && list_empty(&head->list)) | ||
| 426 | kblockd_schedule_work(&head->requeue_work); | ||
| 427 | } | ||
| 428 | |||
| 420 | #else | 429 | #else |
| 421 | static inline void nvme_failover_req(struct request *req) | 430 | static inline void nvme_failover_req(struct request *req) |
| 422 | { | 431 | { |
| @@ -448,6 +457,9 @@ static inline void nvme_mpath_remove_disk_links(struct nvme_ns *ns) | |||
| 448 | static inline void nvme_mpath_clear_current_path(struct nvme_ns *ns) | 457 | static inline void nvme_mpath_clear_current_path(struct nvme_ns *ns) |
| 449 | { | 458 | { |
| 450 | } | 459 | } |
| 460 | static inline void nvme_mpath_check_last_path(struct nvme_ns *ns) | ||
| 461 | { | ||
| 462 | } | ||
| 451 | #endif /* CONFIG_NVME_MULTIPATH */ | 463 | #endif /* CONFIG_NVME_MULTIPATH */ |
| 452 | 464 | ||
| 453 | #ifdef CONFIG_NVM | 465 | #ifdef CONFIG_NVM |
