• Sreekanth Reddy's avatar
    scsi: mpt3sas: Fix for block device of raid exists even after deleting raid disk · 6d3a56ed
    Sreekanth Reddy authored
    While merging mpt3sas & mpt2sas code, we added the is_warpdrive check
    condition on the wrong line
    
    ---------------------------------------------------------------------------
     scsih_target_alloc(struct scsi_target *starget)
                            sas_target_priv_data->handle = raid_device->handle;
                            sas_target_priv_data->sas_address = raid_device->wwid;
                            sas_target_priv_data->flags |= MPT_TARGET_FLAGS_VOLUME;
    -                       raid_device->starget = starget;
    +                       sas_target_priv_data->raid_device = raid_device;
    +                       if (ioc->is_warpdrive)
    +                               raid_device->starget = starget;
                    }
                    spin_unlock_irqrestore(&ioc->raid_device_lock, flags);
                    return 0;
    ------------------------------------------------------------------------------
    
    That check should be for the line sas_target_priv_data->raid_device =
    raid_device;
    
    Due to above hunk, we are not initializing raid_device's starget for
    raid volumes, and so during raid disk deletion driver is not calling
    scsi_remove_target() API as driver observes starget field of
    raid_device's structure as NULL.
    Signed-off-by: default avatarSreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Cc: <stable@vger.kernel.org> # v4.4+
    Fixes: 7786ab6a ("mpt3sas: Ported WarpDrive product SSS6200 support")
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    6d3a56ed
mpt3sas_scsih.c 263 KB