scsi: megaraid_sas: Target with invalid LUN ID is deleted during scan
The megaraid_sas driver supports single LUN for RAID devices. That is LUN 0. All other LUNs are unsupported. When a device scan on a logical target with invalid LUN number is invoked through sysfs, that target ends up getting removed. Add LUN ID validation in the slave destroy function to avoid the target deletion. Link: https://lore.kernel.org/r/20220324094711.48833-1-chandrakanth.patil@broadcom.com Signed-off-by: Chandrakanth patil <chandrakanth.patil@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
bfb7789bcb
Коммит
56495f295d
|
@ -2560,6 +2560,9 @@ struct megasas_instance_template {
|
|||
#define MEGASAS_IS_LOGICAL(sdev) \
|
||||
((sdev->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1)
|
||||
|
||||
#define MEGASAS_IS_LUN_VALID(sdev) \
|
||||
(((sdev)->lun == 0) ? 1 : 0)
|
||||
|
||||
#define MEGASAS_DEV_INDEX(scp) \
|
||||
(((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + \
|
||||
scp->device->id)
|
||||
|
|
|
@ -2126,6 +2126,9 @@ static int megasas_slave_alloc(struct scsi_device *sdev)
|
|||
goto scan_target;
|
||||
}
|
||||
return -ENXIO;
|
||||
} else if (!MEGASAS_IS_LUN_VALID(sdev)) {
|
||||
sdev_printk(KERN_INFO, sdev, "%s: invalid LUN\n", __func__);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
scan_target:
|
||||
|
@ -2156,6 +2159,10 @@ static void megasas_slave_destroy(struct scsi_device *sdev)
|
|||
instance = megasas_lookup_instance(sdev->host->host_no);
|
||||
|
||||
if (MEGASAS_IS_LOGICAL(sdev)) {
|
||||
if (!MEGASAS_IS_LUN_VALID(sdev)) {
|
||||
sdev_printk(KERN_INFO, sdev, "%s: invalid LUN\n", __func__);
|
||||
return;
|
||||
}
|
||||
ld_tgt_id = MEGASAS_TARGET_ID(sdev);
|
||||
instance->ld_tgtid_status[ld_tgt_id] = LD_TARGET_ID_DELETED;
|
||||
if (megasas_dbg_lvl & LD_PD_DEBUG)
|
||||
|
|
Загрузка…
Ссылка в новой задаче