[PATCH 1/4] nvme-fc: remove err_work work item
Himanshu Madhani
himanshu.madhani at oracle.com
Mon Oct 19 10:43:16 EDT 2020
> On Oct 16, 2020, at 4:27 PM, James Smart <james.smart at broadcom.com> wrote:
>
> err_work was created to handle errors (mainly io timeout) while in
> CONNECTING state. The flag for err_work_active is also unneeded.
>
> Remove err_work_active and err_work. The actions to abort ios are moved
> inline to nvme_error_recovery().
>
> Signed-off-by: James Smart <james.smart at broadcom.com>
> ---
> drivers/nvme/host/fc.c | 40 ++++++++++------------------------------
> 1 file changed, 10 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
> index 7067aaf50bf7..06fb208ab350 100644
> --- a/drivers/nvme/host/fc.c
> +++ b/drivers/nvme/host/fc.c
> @@ -153,7 +153,6 @@ struct nvme_fc_ctrl {
> u32 cnum;
>
> bool ioq_live;
> - atomic_t err_work_active;
> u64 association_id;
> struct nvmefc_ls_rcv_op *rcv_disconn;
>
> @@ -163,7 +162,6 @@ struct nvme_fc_ctrl {
> struct blk_mq_tag_set tag_set;
>
> struct delayed_work connect_work;
> - struct work_struct err_work;
>
> struct kref ref;
> unsigned long flags;
> @@ -2410,11 +2408,11 @@ nvme_fc_nvme_ctrl_freed(struct nvme_ctrl *nctrl)
> nvme_fc_ctrl_put(ctrl);
> }
>
> +static void __nvme_fc_terminate_io(struct nvme_fc_ctrl *ctrl);
> +
> static void
> nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)
> {
> - int active;
> -
> /*
> * if an error (io timeout, etc) while (re)connecting,
> * it's an error on creating the new association.
> @@ -2423,11 +2421,14 @@ nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)
> * ios hitting this path before things are cleaned up.
> */
> if (ctrl->ctrl.state == NVME_CTRL_CONNECTING) {
> - active = atomic_xchg(&ctrl->err_work_active, 1);
> - if (!active && !queue_work(nvme_fc_wq, &ctrl->err_work)) {
> - atomic_set(&ctrl->err_work_active, 0);
> - WARN_ON(1);
> - }
> + __nvme_fc_terminate_io(ctrl);
> +
> + /*
> + * Rescheduling the connection after recovering
> + * from the io error is left to the reconnect work
> + * item, which is what should have stalled waiting on
> + * the io that had the error that scheduled this work.
> + */
> return;
> }
>
> @@ -3233,7 +3234,6 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl)
> {
> struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl);
>
> - cancel_work_sync(&ctrl->err_work);
> cancel_delayed_work_sync(&ctrl->connect_work);
> /*
> * kill the association on the link side. this will block
> @@ -3343,23 +3343,6 @@ nvme_fc_reset_ctrl_work(struct work_struct *work)
> ctrl->cnum);
> }
>
> -static void
> -nvme_fc_connect_err_work(struct work_struct *work)
> -{
> - struct nvme_fc_ctrl *ctrl =
> - container_of(work, struct nvme_fc_ctrl, err_work);
> -
> - __nvme_fc_terminate_io(ctrl);
> -
> - atomic_set(&ctrl->err_work_active, 0);
> -
> - /*
> - * Rescheduling the connection after recovering
> - * from the io error is left to the reconnect work
> - * item, which is what should have stalled waiting on
> - * the io that had the error that scheduled this work.
> - */
> -}
>
> static const struct nvme_ctrl_ops nvme_fc_ctrl_ops = {
> .name = "fc",
> @@ -3474,7 +3457,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
> ctrl->dev = lport->dev;
> ctrl->cnum = idx;
> ctrl->ioq_live = false;
> - atomic_set(&ctrl->err_work_active, 0);
> init_waitqueue_head(&ctrl->ioabort_wait);
>
> get_device(ctrl->dev);
> @@ -3482,7 +3464,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
>
> INIT_WORK(&ctrl->ctrl.reset_work, nvme_fc_reset_ctrl_work);
> INIT_DELAYED_WORK(&ctrl->connect_work, nvme_fc_connect_ctrl_work);
> - INIT_WORK(&ctrl->err_work, nvme_fc_connect_err_work);
> spin_lock_init(&ctrl->lock);
>
> /* io queue count */
> @@ -3575,7 +3556,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
> fail_ctrl:
> nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_DELETING);
> cancel_work_sync(&ctrl->ctrl.reset_work);
> - cancel_work_sync(&ctrl->err_work);
> cancel_delayed_work_sync(&ctrl->connect_work);
>
> ctrl->ctrl.opts = NULL;
> --
> 2.26.2
>
> _______________________________________________
> Linux-nvme mailing list
> Linux-nvme at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-nvme
Looks Good.
Reviewed-by: Himanshu Madhani <himanshu.madhani at oracle.com>
--
Himanshu Madhani Oracle Linux Engineering
More information about the Linux-nvme
mailing list