On Mon, Sep 11, 2017 at 09:21:49PM -0700, Anish M Jhaveri wrote: > struct nvme_ctrl_ops { > @@ -277,6 +307,7 @@ bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, > int nvme_disable_ctrl(struct nvme_ctrl *ctrl, u64 cap); > int nvme_enable_ctrl(struct nvme_ctrl *ctrl, u64 cap); > int nvme_shutdown_ctrl(struct nvme_ctrl *ctrl); > +struct nvme_ctrl *nvme_init_mpath_ctrl(struct nvme_ctrl *ctrl); > int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, > const struct nvme_ctrl_ops *ops, unsigned long quirks); > void nvme_uninit_ctrl(struct nvme_ctrl *ctrl); > @@ -287,6 +318,9 @@ int nvme_init_identify(struct nvme_ctrl *ctrl); > > void nvme_queue_scan(struct nvme_ctrl *ctrl); > void nvme_remove_namespaces(struct nvme_ctrl *ctrl); > +void nvme_trigger_failover(struct nvme_ctrl *ctrl); > +int nvme_set_ns_active(struct nvme_ns *standby_ns, struct nvme_ns *mpath_ns, > + int retry_cnt); > > int nvme_sec_submit(void *data, u16 spsp, u8 secp, void *buffer, size_t len, > bool send); > @@ -325,6 +359,7 @@ int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count); > void nvme_start_keep_alive(struct nvme_ctrl *ctrl); > void nvme_stop_keep_alive(struct nvme_ctrl *ctrl); > int nvme_reset_ctrl(struct nvme_ctrl *ctrl); > +void nvme_mpath_ns_remove(struct nvme_ns *ns); > > #ifdef CONFIG_NVM > int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id); I find this patch series confusing to review. You declare these failover functions in patch 1, use them in patch 2, but they're not defined until patch 7.