[PATCH 3/4] nvme-fc: remove nvme_fc_terminate_io()
Himanshu Madhani
himanshu.madhani at oracle.com
Mon Oct 19 10:51:36 EDT 2020
> On Oct 16, 2020, at 4:27 PM, James Smart <james.smart at broadcom.com> wrote:
>
> __nvme_fc_terminate_io() is now called by only 1 place, in reset_work.
> Consoldate and move the functionality of terminate_io into reset_work.
>
> In reset_work, rather than calling the create_association directly,
> schedule the connect work element to do its thing. After scheduling, flush
> the connect work element to continue with semantic of not returning until
> connect has been attempted at least once.
>
> Signed-off-by: James Smart <james.smart at broadcom.com>
> ---
> drivers/nvme/host/fc.c | 49 ++++++++++++++----------------------------
> 1 file changed, 16 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
> index d65a4a9f4808..b2f9b3752df7 100644
> --- a/drivers/nvme/host/fc.c
> +++ b/drivers/nvme/host/fc.c
> @@ -3279,49 +3279,32 @@ nvme_fc_reconnect_or_delete(struct nvme_fc_ctrl *ctrl, int status)
> }
>
> static void
> -__nvme_fc_terminate_io(struct nvme_fc_ctrl *ctrl)
> +nvme_fc_reset_ctrl_work(struct work_struct *work)
> {
> - /*
> - * For any other state, kill the association. As this routine
> - * is a common io abort routine for resetting and such, after
> - * the association is terminated, ensure that the state is set
> - * to CONNECTING.
> - */
> + struct nvme_fc_ctrl *ctrl =
> + container_of(work, struct nvme_fc_ctrl, ctrl.reset_work);
>
> - nvme_stop_keep_alive(&ctrl->ctrl);
> + nvme_stop_ctrl(&ctrl->ctrl);
>
> /* will block will waiting for io to terminate */
> nvme_fc_delete_association(ctrl);
>
> - if (ctrl->ctrl.state != NVME_CTRL_CONNECTING &&
> - !nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING))
> + if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING))
> dev_err(ctrl->ctrl.device,
> "NVME-FC{%d}: error_recovery: Couldn't change state "
> "to CONNECTING\n", ctrl->cnum);
> -}
> -
> -static void
> -nvme_fc_reset_ctrl_work(struct work_struct *work)
> -{
> - struct nvme_fc_ctrl *ctrl =
> - container_of(work, struct nvme_fc_ctrl, ctrl.reset_work);
> - int ret;
> -
> - __nvme_fc_terminate_io(ctrl);
>
> - nvme_stop_ctrl(&ctrl->ctrl);
> -
> - if (ctrl->rport->remoteport.port_state == FC_OBJSTATE_ONLINE)
> - ret = nvme_fc_create_association(ctrl);
> - else
> - ret = -ENOTCONN;
> -
> - if (ret)
> - nvme_fc_reconnect_or_delete(ctrl, ret);
> - else
> - dev_info(ctrl->ctrl.device,
> - "NVME-FC{%d}: controller reset complete\n",
> - ctrl->cnum);
> + if (ctrl->rport->remoteport.port_state == FC_OBJSTATE_ONLINE) {
> + if (!queue_delayed_work(nvme_wq, &ctrl->connect_work, 0)) {
> + dev_err(ctrl->ctrl.device,
> + "NVME-FC{%d}: failed to schedule connect "
> + "after reset\n", ctrl->cnum);
> + } else {
> + flush_delayed_work(&ctrl->connect_work);
> + }
> + } else {
> + nvme_fc_reconnect_or_delete(ctrl, -ENOTCONN);
> + }
> }
>
>
> --
> 2.26.2
>
> _______________________________________________
> Linux-nvme mailing list
> Linux-nvme at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-nvme
Looks Okay.
Reviewed-by: Himanshu Madhani <himanshu.madhani at oracle.com>
--
Himanshu Madhani Oracle Linux Engineering
More information about the Linux-nvme
mailing list