linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev()
@ 2019-05-18  9:40 Jason Yan
  2019-05-20 10:54 ` John Garry
  0 siblings, 1 reply; 4+ messages in thread
From: Jason Yan @ 2019-05-18  9:40 UTC (permalink / raw)
  To: martin.petersen, jejb
  Cc: linux-scsi, linux-kernel, hare, dan.j.williams, jthumshirn, hch,
	huangdaode, chenxiang66, miaoxie, john.garry, zhaohongjiang,
	Jason Yan

Since we are processing events synchronously now, the second call of
sas_ex_join_wide_port() in sas_ex_discover_dev() is not needed. There
will be no races with other works in disco workqueue. So remove the
second sas_ex_join_wide_port().

I did not change the return value of 'res' to error when discover failed
because we need to continue to discover other phys if one phy discover
failed. So let's keep that logic as before and just add a debug log to
detect the failure.

Signed-off-by: Jason Yan <yanaijie@huawei.com>
---
 drivers/scsi/libsas/sas_expander.c | 24 +++---------------------
 1 file changed, 3 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
index 83f2fd70ce76..8f90dd497dfe 100644
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -1116,27 +1116,9 @@ static int sas_ex_discover_dev(struct domain_device *dev, int phy_id)
 		break;
 	}
 
-	if (child) {
-		int i;
-
-		for (i = 0; i < ex->num_phys; i++) {
-			if (ex->ex_phy[i].phy_state == PHY_VACANT ||
-			    ex->ex_phy[i].phy_state == PHY_NOT_PRESENT)
-				continue;
-			/*
-			 * Due to races, the phy might not get added to the
-			 * wide port, so we add the phy to the wide port here.
-			 */
-			if (SAS_ADDR(ex->ex_phy[i].attached_sas_addr) ==
-			    SAS_ADDR(child->sas_addr)) {
-				ex->ex_phy[i].phy_state= PHY_DEVICE_DISCOVERED;
-				if (sas_ex_join_wide_port(dev, i))
-					pr_debug("Attaching ex phy%02d to wide port %016llx\n",
-						 i, SAS_ADDR(ex->ex_phy[i].attached_sas_addr));
-			}
-		}
-	}
-
+	if (!child)
+		pr_debug("Ex %016llx phy%02d failed to discover\n",
+			 SAS_ADDR(dev->sas_addr), phy_id);
 	return res;
 }
 
-- 
2.17.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev()
  2019-05-18  9:40 [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev() Jason Yan
@ 2019-05-20 10:54 ` John Garry
  2019-05-20 12:06   ` Jason Yan
  0 siblings, 1 reply; 4+ messages in thread
From: John Garry @ 2019-05-20 10:54 UTC (permalink / raw)
  To: Jason Yan, martin.petersen, jejb
  Cc: linux-scsi, linux-kernel, hare, dan.j.williams, jthumshirn, hch,
	huangdaode, chenxiang66, miaoxie, zhaohongjiang

On 18/05/2019 10:40, Jason Yan wrote:
> Since we are processing events synchronously now, the second call of
> sas_ex_join_wide_port() in sas_ex_discover_dev() is not needed. There
> will be no races with other works in disco workqueue. So remove the
> second sas_ex_join_wide_port().
>
> I did not change the return value of 'res' to error when discover failed
> because we need to continue to discover other phys if one phy discover
> failed. So let's keep that logic as before and just add a debug log to
> detect the failure.
>
> Signed-off-by: Jason Yan <yanaijie@huawei.com>
> ---
>  drivers/scsi/libsas/sas_expander.c | 24 +++---------------------
>  1 file changed, 3 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
> index 83f2fd70ce76..8f90dd497dfe 100644
> --- a/drivers/scsi/libsas/sas_expander.c
> +++ b/drivers/scsi/libsas/sas_expander.c
> @@ -1116,27 +1116,9 @@ static int sas_ex_discover_dev(struct domain_device *dev, int phy_id)
>  		break;
>  	}
>
> -	if (child) {
> -		int i;
> -
> -		for (i = 0; i < ex->num_phys; i++) {
> -			if (ex->ex_phy[i].phy_state == PHY_VACANT ||
> -			    ex->ex_phy[i].phy_state == PHY_NOT_PRESENT)
> -				continue;
> -			/*
> -			 * Due to races, the phy might not get added to the
> -			 * wide port, so we add the phy to the wide port here.
> -			 */
> -			if (SAS_ADDR(ex->ex_phy[i].attached_sas_addr) ==
> -			    SAS_ADDR(child->sas_addr)) {
> -				ex->ex_phy[i].phy_state= PHY_DEVICE_DISCOVERED;
> -				if (sas_ex_join_wide_port(dev, i))
> -					pr_debug("Attaching ex phy%02d to wide port %016llx\n",
> -						 i, SAS_ADDR(ex->ex_phy[i].attached_sas_addr));
> -			}
> -		}
> -	}

This change looks ok.

> -
> +	if (!child)
> +		pr_debug("Ex %016llx phy%02d failed to discover\n",
> +			 SAS_ADDR(dev->sas_addr), phy_id);

nit:
/s/Ex/ex/

In case of "second fanout expander...", before this, we don't attempt to 
discover, and just disable the PHY. In that case, is the log proper?

And, if indeed proper, it would seem to merit a higher log level than 
debug, maybe notice is better.


>  	return res;
>  }
>
>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev()
  2019-05-20 10:54 ` John Garry
@ 2019-05-20 12:06   ` Jason Yan
  2019-05-20 12:39     ` John Garry
  0 siblings, 1 reply; 4+ messages in thread
From: Jason Yan @ 2019-05-20 12:06 UTC (permalink / raw)
  To: John Garry, martin.petersen, jejb
  Cc: linux-scsi, linux-kernel, hare, dan.j.williams, jthumshirn, hch,
	huangdaode, chenxiang66, miaoxie, zhaohongjiang



On 2019/5/20 18:54, John Garry wrote:
> On 18/05/2019 10:40, Jason Yan wrote:
>> Since we are processing events synchronously now, the second call of
>> sas_ex_join_wide_port() in sas_ex_discover_dev() is not needed. There
>> will be no races with other works in disco workqueue. So remove the
>> second sas_ex_join_wide_port().
>>
>> I did not change the return value of 'res' to error when discover failed
>> because we need to continue to discover other phys if one phy discover
>> failed. So let's keep that logic as before and just add a debug log to
>> detect the failure.
>>
>> Signed-off-by: Jason Yan <yanaijie@huawei.com>
>> ---
>>  drivers/scsi/libsas/sas_expander.c | 24 +++---------------------
>>  1 file changed, 3 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/scsi/libsas/sas_expander.c 
>> b/drivers/scsi/libsas/sas_expander.c
>> index 83f2fd70ce76..8f90dd497dfe 100644
>> --- a/drivers/scsi/libsas/sas_expander.c
>> +++ b/drivers/scsi/libsas/sas_expander.c
>> @@ -1116,27 +1116,9 @@ static int sas_ex_discover_dev(struct 
>> domain_device *dev, int phy_id)
>>          break;
>>      }
>>
>> -    if (child) {
>> -        int i;
>> -
>> -        for (i = 0; i < ex->num_phys; i++) {
>> -            if (ex->ex_phy[i].phy_state == PHY_VACANT ||
>> -                ex->ex_phy[i].phy_state == PHY_NOT_PRESENT)
>> -                continue;
>> -            /*
>> -             * Due to races, the phy might not get added to the
>> -             * wide port, so we add the phy to the wide port here.
>> -             */
>> -            if (SAS_ADDR(ex->ex_phy[i].attached_sas_addr) ==
>> -                SAS_ADDR(child->sas_addr)) {
>> -                ex->ex_phy[i].phy_state= PHY_DEVICE_DISCOVERED;
>> -                if (sas_ex_join_wide_port(dev, i))
>> -                    pr_debug("Attaching ex phy%02d to wide port 
>> %016llx\n",
>> -                         i, SAS_ADDR(ex->ex_phy[i].attached_sas_addr));
>> -            }
>> -        }
>> -    }
> 
> This change looks ok.
> 
>> -
>> +    if (!child)
>> +        pr_debug("Ex %016llx phy%02d failed to discover\n",
>> +             SAS_ADDR(dev->sas_addr), phy_id);
> 
> nit:
> /s/Ex/ex/

OK.

> 
> In case of "second fanout expander...", before this, we don't attempt to 
> discover, and just disable the PHY. In that case, is the log proper?
> 

In that case the log is not proper. I think we can directly return in 
the case of "second fanout expander..."? Actually nothing to do after 
the phy is disabled.

> And, if indeed proper, it would seem to merit a higher log level than 
> debug, maybe notice is better.
>
Yes, notice should be better.

> 
>>      return res;
>>  }
>>
>>
> 
> 
> 
> .
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev()
  2019-05-20 12:06   ` Jason Yan
@ 2019-05-20 12:39     ` John Garry
  0 siblings, 0 replies; 4+ messages in thread
From: John Garry @ 2019-05-20 12:39 UTC (permalink / raw)
  To: Jason Yan, martin.petersen, jejb
  Cc: linux-scsi, linux-kernel, hare, dan.j.williams, jthumshirn, hch,
	huangdaode, chenxiang66, miaoxie, zhaohongjiang

On 20/05/2019 13:06, Jason Yan wrote:
> OK.
>
>>
>> In case of "second fanout expander...", before this, we don't attempt
>> to discover, and just disable the PHY. In that case, is the log proper?
>>
>
> In that case the log is not proper. I think we can directly return in
> the case of "second fanout expander..."? Actually nothing to do after
> the phy is disabled.

Yeah, that looks fine.

>
>> And, if indeed proper, it would seem to merit a higher log level than
>> debug, maybe notice is better.



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-05-20 12:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-18  9:40 [PATCH] scsi: libsas: no need to join wide port again in sas_ex_discover_dev() Jason Yan
2019-05-20 10:54 ` John Garry
2019-05-20 12:06   ` Jason Yan
2019-05-20 12:39     ` John Garry

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).