Message ID | 20220324094711.48833-1-chandrakanth.patil@broadcom.com |
---|---|
State | New |
Headers | show |
Series | megaraid_sas: device scan on logical target with invalid LUN ID deletes that target from the OS | expand |
Hi Christoph, in shost, we set the max_lun to 8 during load and that is meant for NON_RAID devices. whereas RAID device supports only a single LUN so this patch takes care of that. -ckp On Thu, Mar 24, 2022 at 3:20 PM Christoph Hellwig <hch@infradead.org> wrote: > > On Thu, Mar 24, 2022 at 02:47:11AM -0700, Chandrakanth patil wrote: > > The megaraid_sas driver supports single LUN, that is LUN 0. And all other > > LUNs are unsupported. > > When a device scan on logical target with invalid lun is invoked through > > sysfs that target itself is getting removed from the OS. So added a LUN > > ID validation in the slave destroy to avoid the target deletion. > > Please set the max_lun member ins the host template isntead of papering > over this in the driver.
diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h index 611871ef15b5..4919ea54b827 100644 --- a/drivers/scsi/megaraid/megaraid_sas.h +++ b/drivers/scsi/megaraid/megaraid_sas.h @@ -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) diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index 8bf72dbc33b7..db6793608447 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -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)
The megaraid_sas driver supports single LUN, that is LUN 0. And all other LUNs are unsupported. When a device scan on logical target with invalid lun is invoked through sysfs that target itself is getting removed from the OS. So added a LUN ID validation in the slave destroy to avoid the target deletion. Signed-off-by: Chandrakanth patil <chandrakanth.patil@broadcom.com> --- drivers/scsi/megaraid/megaraid_sas.h | 3 +++ drivers/scsi/megaraid/megaraid_sas_base.c | 7 +++++++ 2 files changed, 10 insertions(+)