Lines Matching refs:ctrl
54 struct nvme_ctrl *ctrl, int *flags)
57 sprintf(disk_name, "nvme%dn%d", ctrl->instance, ns->head->instance);
59 sprintf(disk_name, "nvme%dc%dn%d", ctrl->subsys->instance,
60 ctrl->instance, ns->head->instance);
63 sprintf(disk_name, "nvme%dn%d", ctrl->subsys->instance,
81 if (nvme_is_ana_error(status) && ns->ctrl->ana_log_buf) {
83 queue_work(nvme_wq, &ns->ctrl->ana_work);
94 void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl)
98 down_read(&ctrl->namespaces_rwsem);
99 list_for_each_entry(ns, &ctrl->namespaces, list) {
103 up_read(&ctrl->namespaces_rwsem);
134 void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl)
138 down_read(&ctrl->namespaces_rwsem);
139 list_for_each_entry(ns, &ctrl->namespaces, list) {
143 up_read(&ctrl->namespaces_rwsem);
153 if (ns->ctrl->state != NVME_CTRL_LIVE &&
154 ns->ctrl->state != NVME_CTRL_DELETING)
172 distance = node_distance(node, ns->ctrl->numa_node);
256 return ns->ctrl->state == NVME_CTRL_LIVE &&
281 switch (ns->ctrl->state) {
358 int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
373 if (!(ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) || !multipath)
376 q = blk_alloc_queue(ctrl->numa_node);
385 if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)
397 ctrl->subsys->instance, head->instance);
432 static int nvme_parse_ana_log(struct nvme_ctrl *ctrl, void *data,
433 int (*cb)(struct nvme_ctrl *ctrl, struct nvme_ana_group_desc *,
436 void *base = ctrl->ana_log_buf;
440 lockdep_assert_held(&ctrl->ana_lock);
442 for (i = 0; i < le16_to_cpu(ctrl->ana_log_buf->ngrps); i++) {
447 if (WARN_ON_ONCE(offset > ctrl->ana_log_size - sizeof(*desc)))
455 if (WARN_ON_ONCE(le32_to_cpu(desc->grpid) > ctrl->anagrpmax))
463 if (WARN_ON_ONCE(offset > ctrl->ana_log_size - nsid_buf_size))
466 error = cb(ctrl, desc, data);
491 * nvme_mpath_init_identify() and the ctrl will never complete
497 ns->ctrl->state == NVME_CTRL_LIVE)
501 static int nvme_update_ana_state(struct nvme_ctrl *ctrl,
508 dev_dbg(ctrl->device, "ANA group %d: %s.\n",
518 down_read(&ctrl->namespaces_rwsem);
519 list_for_each_entry(ns, &ctrl->namespaces, list) {
532 up_read(&ctrl->namespaces_rwsem);
536 static int nvme_read_ana_log(struct nvme_ctrl *ctrl)
541 mutex_lock(&ctrl->ana_lock);
542 error = nvme_get_log(ctrl, NVME_NSID_ALL, NVME_LOG_ANA, 0, NVME_CSI_NVM,
543 ctrl->ana_log_buf, ctrl->ana_log_size, 0);
545 dev_warn(ctrl->device, "Failed to get ANA log: %d\n", error);
549 error = nvme_parse_ana_log(ctrl, &nr_change_groups,
566 mod_timer(&ctrl->anatt_timer, ctrl->anatt * HZ * 2 + jiffies);
568 del_timer_sync(&ctrl->anatt_timer);
570 mutex_unlock(&ctrl->ana_lock);
576 struct nvme_ctrl *ctrl = container_of(work, struct nvme_ctrl, ana_work);
578 if (ctrl->state != NVME_CTRL_LIVE)
581 nvme_read_ana_log(ctrl);
584 void nvme_mpath_update(struct nvme_ctrl *ctrl)
588 if (!ctrl->ana_log_buf)
591 mutex_lock(&ctrl->ana_lock);
592 nvme_parse_ana_log(ctrl, &nr_change_groups, nvme_update_ana_state);
593 mutex_unlock(&ctrl->ana_lock);
598 struct nvme_ctrl *ctrl = from_timer(ctrl, t, anatt_timer);
600 dev_info(ctrl->device, "ANATT timeout, resetting controller.\n");
601 nvme_reset_ctrl(ctrl);
604 void nvme_mpath_stop(struct nvme_ctrl *ctrl)
606 if (!nvme_ctrl_use_ana(ctrl))
608 del_timer_sync(&ctrl->anatt_timer);
609 cancel_work_sync(&ctrl->ana_work);
666 static int nvme_lookup_ana_group_desc(struct nvme_ctrl *ctrl,
680 if (nvme_ctrl_use_ana(ns->ctrl)) {
686 mutex_lock(&ns->ctrl->ana_lock);
688 nvme_parse_ana_log(ns->ctrl, &desc, nvme_lookup_ana_group_desc);
689 mutex_unlock(&ns->ctrl->ana_lock);
696 queue_work(nvme_wq, &ns->ctrl->ana_work);
734 void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl)
736 mutex_init(&ctrl->ana_lock);
737 timer_setup(&ctrl->anatt_timer, nvme_anatt_timeout, 0);
738 INIT_WORK(&ctrl->ana_work, nvme_ana_work);
741 int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
743 size_t max_transfer_size = ctrl->max_hw_sectors << SECTOR_SHIFT;
748 if (!multipath || !ctrl->subsys ||
749 !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA))
752 ctrl->anacap = id->anacap;
753 ctrl->anatt = id->anatt;
754 ctrl->nanagrpid = le32_to_cpu(id->nanagrpid);
755 ctrl->anagrpmax = le32_to_cpu(id->anagrpmax);
758 ctrl->nanagrpid * sizeof(struct nvme_ana_group_desc) +
759 ctrl->max_namespaces * sizeof(__le32);
761 dev_err(ctrl->device,
764 dev_err(ctrl->device, "disabling ANA support.\n");
767 if (ana_log_size > ctrl->ana_log_size) {
768 nvme_mpath_stop(ctrl);
769 kfree(ctrl->ana_log_buf);
770 ctrl->ana_log_buf = kmalloc(ana_log_size, GFP_KERNEL);
771 if (!ctrl->ana_log_buf)
774 ctrl->ana_log_size = ana_log_size;
775 error = nvme_read_ana_log(ctrl);
781 nvme_mpath_uninit(ctrl);
785 void nvme_mpath_uninit(struct nvme_ctrl *ctrl)
787 kfree(ctrl->ana_log_buf);
788 ctrl->ana_log_buf = NULL;