diff mbox

scsi: aacraid: Fix PD performance regression over incorrect qd being set

Message ID 20180622135547.6682.71519.stgit@microsemi-rhel.microsemi.net (mailing list archive)
State Accepted
Headers show

Commit Message

Raghava Aditya Renukunta June 22, 2018, 1:55 p.m. UTC
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")
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(-)

Comments

Ewan Milne June 25, 2018, 4:04 p.m. UTC | #1
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>
Martin K. Petersen June 26, 2018, 4:07 p.m. UTC | #2
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 mbox

Patch

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;
 	}
 }