scsi: mpi3mr: Hidden drives not removed during soft reset
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Thu, 5 May 2022 18:48:07 +0000 (00:18 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 11 May 2022 02:18:47 +0000 (22:18 -0400)
If any drive is missing during reset, the driver checks whether the device
is exposed to the OS. If it is, then it removes the device from the OS and
its own internal list. For hidden devices, even if they are found as
missing during reset, the driver is not removing them from its internal
list.

Modify driver to remove hidden devices from the driver's target device list
if they are missing during soft reset.

Link: https://lore.kernel.org/r/20220505184808.24049-2-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpi3mr/mpi3mr_os.c

index 3a46f8835f0044a305fa722bac2fb02a095293c6..70da6d8e7c3c958826314754ef6d25311aa89ddf 100644 (file)
@@ -911,9 +911,11 @@ void mpi3mr_rfresh_tgtdevs(struct mpi3mr_ioc *mrioc)
 
        list_for_each_entry_safe(tgtdev, tgtdev_next, &mrioc->tgtdev_list,
            list) {
-               if ((tgtdev->dev_handle == MPI3MR_INVALID_DEV_HANDLE) &&
-                   tgtdev->host_exposed) {
-                       mpi3mr_remove_tgtdev_from_host(mrioc, tgtdev);
+               if (tgtdev->dev_handle == MPI3MR_INVALID_DEV_HANDLE) {
+                       dprint_reset(mrioc, "removing target device with perst_id(%d)\n",
+                           tgtdev->perst_id);
+                       if (tgtdev->host_exposed)
+                               mpi3mr_remove_tgtdev_from_host(mrioc, tgtdev);
                        mpi3mr_tgtdev_del_from_list(mrioc, tgtdev);
                        mpi3mr_tgtdev_put(tgtdev);
                }