| From e6327c4acf925bb6d6d387d76fc3bd94471e10d8 Mon Sep 17 00:00:00 2001 |
| From: Ranjan Kumar <ranjan.kumar@broadcom.com> |
| Date: Sat, 28 Jun 2025 01:15:36 +0530 |
| Subject: scsi: mpi3mr: Fix race between config read submit and interrupt completion |
| |
| From: Ranjan Kumar <ranjan.kumar@broadcom.com> |
| |
| commit e6327c4acf925bb6d6d387d76fc3bd94471e10d8 upstream. |
| |
| The "is_waiting" flag was updated after calling complete(), which could |
| lead to a race where the waiting thread wakes up before the flag is |
| cleared. This may cause a missed wakeup or stale state check. |
| |
| Reorder the operations to update "is_waiting" before signaling completion |
| to ensure consistent state. |
| |
| Fixes: 824a156633df ("scsi: mpi3mr: Base driver code") |
| Cc: stable@vger.kernel.org |
| Co-developed-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com> |
| Signed-off-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com> |
| Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com> |
| Link: https://lore.kernel.org/r/20250627194539.48851-2-ranjan.kumar@broadcom.com |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/scsi/mpi3mr/mpi3mr_fw.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/scsi/mpi3mr/mpi3mr_fw.c |
| +++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c |
| @@ -411,8 +411,8 @@ static void mpi3mr_process_admin_reply_d |
| MPI3MR_SENSE_BUF_SZ); |
| } |
| if (cmdptr->is_waiting) { |
| - complete(&cmdptr->done); |
| cmdptr->is_waiting = 0; |
| + complete(&cmdptr->done); |
| } else if (cmdptr->callback) |
| cmdptr->callback(mrioc, cmdptr); |
| } |