git: 8d3c3b52423f - main - mpi3mr: Track IO per target counter during queue poll with local variable
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);