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