scsi: libsas: Add spin_lock/unlock() to protect asd_sas_port->phy_list
authorXiang Chen <chenxiang66@hisilicon.com>
Mon, 20 Dec 2021 11:21:27 +0000 (19:21 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Dec 2021 04:38:29 +0000 (23:38 -0500)
Most places that use asd_sas_port->phy_list in libsas are protected by
spinlock asd_sas_port->phy_list_lock. However, there are still a few places
which miss the lock. Add it in those places.

Link: https://lore.kernel.org/r/1639999298-244569-5-git-send-email-chenxiang66@hisilicon.com
Reviewed-by: John Garry <john.garry@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libsas/sas_event.c

index f703115..af60562 100644 (file)
@@ -104,11 +104,15 @@ void sas_enable_revalidation(struct sas_ha_struct *ha)
                if (!test_and_clear_bit(ev, &d->pending))
                        continue;
 
-               if (list_empty(&port->phy_list))
+               spin_lock(&port->phy_list_lock);
+               if (list_empty(&port->phy_list)) {
+                       spin_unlock(&port->phy_list_lock);
                        continue;
+               }
 
                sas_phy = container_of(port->phy_list.next, struct asd_sas_phy,
                                port_phy_el);
+               spin_unlock(&port->phy_list_lock);
                sas_notify_port_event(sas_phy,
                                PORTE_BROADCAST_RCVD, GFP_KERNEL);
        }