]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: megaraid_sas: Fix for a potential deadlock
authorTomas Henzl <thenzl@redhat.com>
Mon, 23 Sep 2024 17:48:33 +0000 (19:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2025 12:24:58 +0000 (13:24 +0100)
[ Upstream commit 50740f4dc78b41dec7c8e39772619d5ba841ddd7 ]

This fixes a 'possible circular locking dependency detected' warning
      CPU0                    CPU1
      ----                    ----
 lock(&instance->reset_mutex);
                              lock(&shost->scan_mutex);
                              lock(&instance->reset_mutex);
 lock(&shost->scan_mutex);

Fix this by temporarily releasing the reset_mutex.

Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Link: https://lore.kernel.org/r/20240923174833.45345-1-thenzl@redhat.com
Acked-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/megaraid/megaraid_sas_base.c

index 365279d7c9829d4f97e1907d88fd9767b12c1917..d709d261d0ad127eb6db742ab36e7a508e4c73c7 100644 (file)
@@ -8868,8 +8868,11 @@ megasas_aen_polling(struct work_struct *work)
                                                   (ld_target_id / MEGASAS_MAX_DEV_PER_CHANNEL),
                                                   (ld_target_id - MEGASAS_MAX_DEV_PER_CHANNEL),
                                                   0);
-                       if (sdev1)
+                       if (sdev1) {
+                               mutex_unlock(&instance->reset_mutex);
                                megasas_remove_scsi_device(sdev1);
+                               mutex_lock(&instance->reset_mutex);
+                       }
 
                        event_type = SCAN_VD_CHANNEL;
                        break;