Message ID | 20180622135547.6682.71519.stgit@microsemi-rhel.microsemi.net (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Fri, 2018-06-22 at 06:55 -0700, Raghava Aditya Renukunta wrote: > The driver fails to set the correct queue depth for native devices, due > to failing to set the device type prior to calling > aac_set_safw_target_qd(). This results in slave configure setting the > queue depth to 1. > > This causes around 30% performance degradation. Fixed by setting the > dev type before trying to set queue depth. > > Reported-by: Steve Best <sbest@redhat.com> > Fixes: 0bcb45fb20c2a ("scsi: aacraid: Add helper function to set queue depth") s/0bcb45fb20c2a/0bcb45fb20c21/ > cc: stable@vger.kernel.org > Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com> > Reviewed-by: David Carroll <David.Carroll@microsemi.com> > --- > drivers/scsi/aacraid/aachba.c | 15 +++++++-------- > 1 file changed, 7 insertions(+), 8 deletions(-) > > diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c > index a9831bd37a73..a57f3a7d4748 100644 > --- a/drivers/scsi/aacraid/aachba.c > +++ b/drivers/scsi/aacraid/aachba.c > @@ -1974,7 +1974,6 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev) > u32 lun_count, nexus; > u32 i, bus, target; > u8 expose_flag, attribs; > - u8 devtype; > > lun_count = aac_get_safw_phys_lun_count(dev); > > @@ -1992,23 +1991,23 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev) > continue; > > if (expose_flag != 0) { > - devtype = AAC_DEVTYPE_RAID_MEMBER; > - goto update_devtype; > + dev->hba_map[bus][target].devtype = > + AAC_DEVTYPE_RAID_MEMBER; > + continue; > } > > if (nexus != 0 && (attribs & 8)) { > - devtype = AAC_DEVTYPE_NATIVE_RAW; > + dev->hba_map[bus][target].devtype = > + AAC_DEVTYPE_NATIVE_RAW; > dev->hba_map[bus][target].rmw_nexus = > nexus; > } else > - devtype = AAC_DEVTYPE_ARC_RAW; > + dev->hba_map[bus][target].devtype = > + AAC_DEVTYPE_ARC_RAW; > > dev->hba_map[bus][target].scan_counter = dev->scan_counter; > > aac_set_safw_target_qd(dev, bus, target); > - > -update_devtype: > - dev->hba_map[bus][target].devtype = devtype; > } > } > > The "Fixes:" tag above does not look correct to me, I've put in what I see in Martin's tree. Fixes a very noticeable performance regression. Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Raghava, > The driver fails to set the correct queue depth for native devices, > due to failing to set the device type prior to calling > aac_set_safw_target_qd(). This results in slave configure setting the > queue depth to 1. > > This causes around 30% performance degradation. Fixed by setting the > dev type before trying to set queue depth. Applied to 4.18/scsi-fixes. Thank you!
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index a9831bd37a73..a57f3a7d4748 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c @@ -1974,7 +1974,6 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev) u32 lun_count, nexus; u32 i, bus, target; u8 expose_flag, attribs; - u8 devtype; lun_count = aac_get_safw_phys_lun_count(dev); @@ -1992,23 +1991,23 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev) continue; if (expose_flag != 0) { - devtype = AAC_DEVTYPE_RAID_MEMBER; - goto update_devtype; + dev->hba_map[bus][target].devtype = + AAC_DEVTYPE_RAID_MEMBER; + continue; } if (nexus != 0 && (attribs & 8)) { - devtype = AAC_DEVTYPE_NATIVE_RAW; + dev->hba_map[bus][target].devtype = + AAC_DEVTYPE_NATIVE_RAW; dev->hba_map[bus][target].rmw_nexus = nexus; } else - devtype = AAC_DEVTYPE_ARC_RAW; + dev->hba_map[bus][target].devtype = + AAC_DEVTYPE_ARC_RAW; dev->hba_map[bus][target].scan_counter = dev->scan_counter; aac_set_safw_target_qd(dev, bus, target); - -update_devtype: - dev->hba_map[bus][target].devtype = devtype; } }