Michal Suchanek e3724d
From 2e51f78b5d8717bba243f5e857031b1d104a3577 Mon Sep 17 00:00:00 2001
Michal Suchanek e3724d
From: Brian King <brking@linux.vnet.ibm.com>
Michal Suchanek e3724d
Date: Tue, 11 May 2021 13:12:20 -0500
Michal Suchanek e3724d
Subject: [PATCH] scsi: ibmvfc: Reinit target retries
Michal Suchanek e3724d
Michal Suchanek e3724d
References: bsc#1185938 ltc#192043
Michal Suchanek e3724d
Patch-mainline: queued
Michal Suchanek e3724d
Git-repo: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git
Michal Suchanek e3724d
Git-commit: 2e51f78b5d8717bba243f5e857031b1d104a3577
Michal Suchanek e3724d
Michal Suchanek e3724d
If rport target discovery commands fail for some reason, they get retried
Michal Suchanek e3724d
up to a set number of retries. Once the retry limit is exceeded, the target
Michal Suchanek e3724d
is deleted. In order to delete the target, we either need to do an implicit
Michal Suchanek e3724d
logout or a move login. In the move login case, if the move login fails, we
Michal Suchanek e3724d
want to retry it. This ensures the retry counter gets reinitialized so the
Michal Suchanek e3724d
move login will get retried.
Michal Suchanek e3724d
Michal Suchanek e3724d
Link: https://lore.kernel.org/r/1620756740-7045-4-git-send-email-brking@linux.vnet.ibm.com
Michal Suchanek e3724d
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Michal Suchanek e3724d
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Michal Suchanek e3724d
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek e3724d
---
Michal Suchanek e3724d
 drivers/scsi/ibmvscsi/ibmvfc.c | 7 ++++++-
Michal Suchanek e3724d
 1 file changed, 6 insertions(+), 1 deletion(-)
Michal Suchanek e3724d
Michal Suchanek e3724d
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
Michal Suchanek e3724d
index c8d3fdf65a7f..a251dbf630cc 100644
Michal Suchanek e3724d
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
Michal Suchanek e3724d
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
Michal Suchanek e3724d
@@ -654,8 +654,10 @@ static void ibmvfc_reinit_host(struct ibmvfc_host *vhost)
Michal Suchanek e3724d
  **/
Michal Suchanek e3724d
 static void ibmvfc_del_tgt(struct ibmvfc_target *tgt)
Michal Suchanek e3724d
 {
Michal Suchanek e3724d
-	if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT))
Michal Suchanek e3724d
+	if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT)) {
Michal Suchanek e3724d
 		tgt->job_step = ibmvfc_tgt_implicit_logout_and_del;
Michal Suchanek e3724d
+		tgt->init_retries = 0;
Michal Suchanek e3724d
+	}
Michal Suchanek e3724d
 	wake_up(&tgt->vhost->work_wait_q);
Michal Suchanek e3724d
 }
Michal Suchanek e3724d
 
Michal Suchanek e3724d
@@ -4744,6 +4746,7 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost,
Michal Suchanek e3724d
 				 */
Michal Suchanek e3724d
 				wtgt->new_scsi_id = scsi_id;
Michal Suchanek e3724d
 				wtgt->action = IBMVFC_TGT_ACTION_INIT;
Michal Suchanek e3724d
+				wtgt->init_retries = 0;
Michal Suchanek e3724d
 				ibmvfc_init_tgt(wtgt, ibmvfc_tgt_move_login);
Michal Suchanek e3724d
 			}
Michal Suchanek e3724d
 			goto unlock_out;
Michal Suchanek e3724d
@@ -5336,6 +5339,7 @@ static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt)
Michal Suchanek e3724d
 		tgt_dbg(tgt, "Deleting rport with outstanding I/O\n");
Michal Suchanek e3724d
 		ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT);
Michal Suchanek e3724d
 		tgt->rport = NULL;
Michal Suchanek e3724d
+		tgt->init_retries = 0;
Michal Suchanek e3724d
 		spin_unlock_irqrestore(vhost->host->host_lock, flags);
Michal Suchanek e3724d
 		fc_remote_port_delete(rport);
Michal Suchanek e3724d
 		return;
Michal Suchanek e3724d
@@ -5490,6 +5494,7 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
Michal Suchanek e3724d
 				tgt_dbg(tgt, "Deleting rport with I/O outstanding\n");
Michal Suchanek e3724d
 				rport = tgt->rport;
Michal Suchanek e3724d
 				tgt->rport = NULL;
Michal Suchanek e3724d
+				tgt->init_retries = 0;
Michal Suchanek e3724d
 				ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT);
Michal Suchanek e3724d
 
Michal Suchanek e3724d
 				/*
Michal Suchanek e3724d
-- 
Michal Suchanek e3724d
2.26.2
Michal Suchanek e3724d