]> 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, 2 Jan 2025 09:30:51 +0000 (10:30 +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 37208bc08c667489d1aa84daa8c379debf87b814..f4b32ce45ce0930ff7946dde1e5fcb27f8c9f1df 100644 (file)
@@ -8905,8 +8905,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;