Lines Matching refs:ns

35 void nvme_set_disk_name(char *disk_name, struct nvme_ns *ns,  in nvme_set_disk_name()  argument
39 sprintf(disk_name, "nvme%dn%d", ctrl->instance, ns->head->instance); in nvme_set_disk_name()
40 } else if (ns->head->disk) { in nvme_set_disk_name()
42 ctrl->cntlid, ns->head->instance); in nvme_set_disk_name()
46 ns->head->instance); in nvme_set_disk_name()
52 struct nvme_ns *ns = req->q->queuedata; in nvme_failover_req() local
56 spin_lock_irqsave(&ns->head->requeue_lock, flags); in nvme_failover_req()
57 blk_steal_bios(&ns->head->requeue_list, req); in nvme_failover_req()
58 spin_unlock_irqrestore(&ns->head->requeue_lock, flags); in nvme_failover_req()
74 nvme_mpath_clear_current_path(ns); in nvme_failover_req()
75 if (ns->ctrl->ana_log_buf) { in nvme_failover_req()
76 set_bit(NVME_NS_ANA_PENDING, &ns->flags); in nvme_failover_req()
77 queue_work(nvme_wq, &ns->ctrl->ana_work); in nvme_failover_req()
85 nvme_reset_ctrl(ns->ctrl); in nvme_failover_req()
89 kblockd_schedule_work(&ns->head->requeue_work); in nvme_failover_req()
94 struct nvme_ns *ns; in nvme_kick_requeue_lists() local
97 list_for_each_entry(ns, &ctrl->namespaces, list) { in nvme_kick_requeue_lists()
98 if (ns->head->disk) in nvme_kick_requeue_lists()
99 kblockd_schedule_work(&ns->head->requeue_work); in nvme_kick_requeue_lists()
115 struct nvme_ns *ns, *fallback = NULL; in __nvme_find_path() local
117 list_for_each_entry_rcu(ns, &head->list, siblings) { in __nvme_find_path()
118 if (ns->ctrl->state != NVME_CTRL_LIVE || in __nvme_find_path()
119 test_bit(NVME_NS_ANA_PENDING, &ns->flags)) in __nvme_find_path()
121 switch (ns->ana_state) { in __nvme_find_path()
123 rcu_assign_pointer(head->current_path, ns); in __nvme_find_path()
124 return ns; in __nvme_find_path()
126 fallback = ns; in __nvme_find_path()
138 static inline bool nvme_path_is_optimized(struct nvme_ns *ns) in nvme_path_is_optimized() argument
140 return ns->ctrl->state == NVME_CTRL_LIVE && in nvme_path_is_optimized()
141 ns->ana_state == NVME_ANA_OPTIMIZED; in nvme_path_is_optimized()
146 struct nvme_ns *ns = srcu_dereference(head->current_path, &head->srcu); in nvme_find_path() local
148 if (unlikely(!ns || !nvme_path_is_optimized(ns))) in nvme_find_path()
149 ns = __nvme_find_path(head); in nvme_find_path()
150 return ns; in nvme_find_path()
158 struct nvme_ns *ns; in nvme_ns_head_make_request() local
163 ns = nvme_find_path(head); in nvme_ns_head_make_request()
164 if (likely(ns)) { in nvme_ns_head_make_request()
165 bio->bi_disk = ns->disk; in nvme_ns_head_make_request()
168 disk_devt(ns->head->disk), in nvme_ns_head_make_request()
191 struct nvme_ns *ns; in nvme_ns_head_poll() local
196 ns = srcu_dereference(head->current_path, &head->srcu); in nvme_ns_head_poll()
197 if (likely(ns && nvme_path_is_optimized(ns))) in nvme_ns_head_poll()
198 found = ns->queue->poll_fn(q, qc); in nvme_ns_head_poll()
276 static void nvme_mpath_set_live(struct nvme_ns *ns) in nvme_mpath_set_live() argument
278 struct nvme_ns_head *head = ns->head; in nvme_mpath_set_live()
280 lockdep_assert_held(&ns->head->lock); in nvme_mpath_set_live()
293 kblockd_schedule_work(&ns->head->requeue_work); in nvme_mpath_set_live()
342 struct nvme_ns *ns) in nvme_update_ns_ana_state() argument
346 mutex_lock(&ns->head->lock); in nvme_update_ns_ana_state()
347 old = ns->ana_state; in nvme_update_ns_ana_state()
348 ns->ana_grpid = le32_to_cpu(desc->grpid); in nvme_update_ns_ana_state()
349 ns->ana_state = desc->state; in nvme_update_ns_ana_state()
350 clear_bit(NVME_NS_ANA_PENDING, &ns->flags); in nvme_update_ns_ana_state()
352 if (nvme_state_is_live(ns->ana_state) && !nvme_state_is_live(old)) in nvme_update_ns_ana_state()
353 nvme_mpath_set_live(ns); in nvme_update_ns_ana_state()
354 mutex_unlock(&ns->head->lock); in nvme_update_ns_ana_state()
362 struct nvme_ns *ns; in nvme_update_ana_state() local
375 list_for_each_entry(ns, &ctrl->namespaces, list) { in nvme_update_ana_state()
376 if (ns->head->ns_id != le32_to_cpu(desc->nsids[n])) in nvme_update_ana_state()
378 nvme_update_ns_ana_state(desc, ns); in nvme_update_ana_state()
459 struct nvme_ns *ns = nvme_get_ns_from_dev(dev); in ana_state_show() local
461 return sprintf(buf, "%s\n", nvme_ana_state_names[ns->ana_state]); in ana_state_show()
468 struct nvme_ns *ns = data; in nvme_set_ns_ana_state() local
470 if (ns->ana_grpid == le32_to_cpu(desc->grpid)) { in nvme_set_ns_ana_state()
471 nvme_update_ns_ana_state(desc, ns); in nvme_set_ns_ana_state()
478 void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id) in nvme_mpath_add_disk() argument
480 if (nvme_ctrl_use_ana(ns->ctrl)) { in nvme_mpath_add_disk()
481 mutex_lock(&ns->ctrl->ana_lock); in nvme_mpath_add_disk()
482 ns->ana_grpid = le32_to_cpu(id->anagrpid); in nvme_mpath_add_disk()
483 nvme_parse_ana_log(ns->ctrl, ns, nvme_set_ns_ana_state); in nvme_mpath_add_disk()
484 mutex_unlock(&ns->ctrl->ana_lock); in nvme_mpath_add_disk()
486 mutex_lock(&ns->head->lock); in nvme_mpath_add_disk()
487 ns->ana_state = NVME_ANA_OPTIMIZED; in nvme_mpath_add_disk()
488 nvme_mpath_set_live(ns); in nvme_mpath_add_disk()
489 mutex_unlock(&ns->head->lock); in nvme_mpath_add_disk()