git: 8d3c3b52423f - main - mpi3mr: Track IO per target counter during queue poll with local variable

From: Sumit Saxena <ssaxena_at_FreeBSD.org>
Date: Thu, 06 Jun 2024 10:39:33 UTC
The branch main has been updated by ssaxena:

URL: https://cgit.FreeBSD.org/src/commit/?id=8d3c3b52423f9740da424aa6dd73a20e694a9e08

commit 8d3c3b52423f9740da424aa6dd73a20e694a9e08
Author:     Chandrakanth patil <chandrakanth.patil@broadcom.com>
AuthorDate: 2024-06-06 10:28:38 +0000
Commit:     Sumit Saxena <ssaxena@FreeBSD.org>
CommitDate: 2024-06-06 10:39:16 +0000

    mpi3mr: Track IO per target counter during queue poll with local variable
    
    Reviewed by:            imp
    Approved by:            imp
    Differential revision:  https://reviews.freebsd.org/D44494
---
 sys/dev/mpi3mr/mpi3mr_cam.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/sys/dev/mpi3mr/mpi3mr_cam.c b/sys/dev/mpi3mr/mpi3mr_cam.c
index e3958ed8daf2..e00d61073d96 100644
--- a/sys/dev/mpi3mr/mpi3mr_cam.c
+++ b/sys/dev/mpi3mr/mpi3mr_cam.c
@@ -1839,6 +1839,7 @@ int mpi3mr_remove_device_from_os(struct mpi3mr_softc *sc, U16 handle)
 {
 	int retval = 0;
 	struct mpi3mr_target *target;
+	unsigned int target_outstanding;
 
 	mpi3mr_dprint(sc, MPI3MR_EVENT,
 		"Removing Device (dev_handle: %d)\n", handle);
@@ -1856,16 +1857,17 @@ int mpi3mr_remove_device_from_os(struct mpi3mr_softc *sc, U16 handle)
 
 	target->flags |= MPI3MRSAS_TARGET_INREMOVAL;
 
-	if (mpi3mr_atomic_read(&target->outstanding)) {
-		mpi3mr_dprint(sc, MPI3MR_ERROR, "there are [%2d] outstanding IOs on target: %d"
-			      "Poll reply queue once\n", mpi3mr_atomic_read(&target->outstanding),
-			      target->per_id);
-		mpi3mr_poll_pend_io_completions(sc);
-		if (mpi3mr_atomic_read(&target->outstanding))
-			mpi3mr_dprint(sc, MPI3MR_ERROR, "[%2d] outstanding IOs present on target: %d"
-				      "despite poll\n", mpi3mr_atomic_read(&target->outstanding),
-				      target->per_id);
-	}
+	target_outstanding = mpi3mr_atomic_read(&target->outstanding);
+	if (target_outstanding) {
+		mpi3mr_dprint(sc, MPI3MR_ERROR, "there are [%2d] outstanding IOs on target: %d "
+			      "Poll reply queue once\n", target_outstanding, target->per_id);
+ 		mpi3mr_poll_pend_io_completions(sc);
+		target_outstanding = mpi3mr_atomic_read(&target->outstanding);
+		if (target_outstanding)
+			target_outstanding = mpi3mr_atomic_read(&target->outstanding);
+			mpi3mr_dprint(sc, MPI3MR_ERROR, "[%2d] outstanding IOs present on target: %d "
+				      "despite poll\n", target_outstanding, target->per_id);
+ 	}
 
 	if (target->exposed_to_os && !sc->reset_in_progress) {
 		mpi3mr_rescan_target(sc, target);