diff mbox series

[1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void

Message ID 1645700699-82369-2-git-send-email-john.garry@huawei.com (mailing list archive)
State Superseded
Headers show
Series scsi: libsas: Some minor improvements | expand

Commit Message

John Garry Feb. 24, 2022, 11:04 a.m. UTC
Nobody checks the return codes, so make them return void. Indeed, if the
LLDD cannot send an event, nothing much can be done in the LLDD about it.

Also remove prototype for sas_notify_phy_event() in sas_internal.h, which
should not be there.

Signed-off-by: John Garry <john.garry@huawei.com>
Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com>
---
 drivers/scsi/libsas/sas_event.c    | 20 ++++++++------------
 drivers/scsi/libsas/sas_internal.h |  2 --
 include/scsi/libsas.h              |  8 ++++----
 3 files changed, 12 insertions(+), 18 deletions(-)

Comments

Damien Le Moal Feb. 24, 2022, 12:43 p.m. UTC | #1
On 2/24/22 20:04, John Garry wrote:
> Nobody checks the return codes, so make them return void. Indeed, if the
> LLDD cannot send an event, nothing much can be done in the LLDD about it.

It really sound like the LLDDs should be fixed to e.g. reset the adapter
if things go south with these functions. No sure though.

> 
> Also remove prototype for sas_notify_phy_event() in sas_internal.h, which
> should not be there.
> 
> Signed-off-by: John Garry <john.garry@huawei.com>
> Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com>

In any case, these changes do not make anything worse :)

Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>

> ---
>  drivers/scsi/libsas/sas_event.c    | 20 ++++++++------------
>  drivers/scsi/libsas/sas_internal.h |  2 --
>  include/scsi/libsas.h              |  8 ++++----
>  3 files changed, 12 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
> index 3613b9b315bc..8ff58fd97837 100644
> --- a/drivers/scsi/libsas/sas_event.c
> +++ b/drivers/scsi/libsas/sas_event.c
> @@ -165,8 +165,8 @@ static bool sas_defer_event(struct asd_sas_phy *phy, struct asd_sas_event *ev)
>  	return deferred;
>  }
>  
> -int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
> -			  gfp_t gfp_flags)
> +void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
> +			   gfp_t gfp_flags)
>  {
>  	struct sas_ha_struct *ha = phy->ha;
>  	struct asd_sas_event *ev;
> @@ -176,7 +176,7 @@ int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>  
>  	ev = sas_alloc_event(phy, gfp_flags);
>  	if (!ev)
> -		return -ENOMEM;
> +		return;
>  
>  	/* Call pm_runtime_put() with pairs in sas_port_event_worker() */
>  	pm_runtime_get_noresume(ha->dev);
> @@ -184,20 +184,18 @@ int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>  	INIT_SAS_EVENT(ev, sas_port_event_worker, phy, event);
>  
>  	if (sas_defer_event(phy, ev))
> -		return 0;
> +		return;
>  
>  	ret = sas_queue_event(event, &ev->work, ha);
>  	if (ret != 1) {
>  		pm_runtime_put(ha->dev);
>  		sas_free_event(ev);
>  	}
> -
> -	return ret;
>  }
>  EXPORT_SYMBOL_GPL(sas_notify_port_event);
>  
> -int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
> -			 gfp_t gfp_flags)
> +void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
> +			  gfp_t gfp_flags)
>  {
>  	struct sas_ha_struct *ha = phy->ha;
>  	struct asd_sas_event *ev;
> @@ -207,7 +205,7 @@ int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>  
>  	ev = sas_alloc_event(phy, gfp_flags);
>  	if (!ev)
> -		return -ENOMEM;
> +		return;
>  
>  	/* Call pm_runtime_put() with pairs in sas_phy_event_worker() */
>  	pm_runtime_get_noresume(ha->dev);
> @@ -215,14 +213,12 @@ int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>  	INIT_SAS_EVENT(ev, sas_phy_event_worker, phy, event);
>  
>  	if (sas_defer_event(phy, ev))
> -		return 0;
> +		return;
>  
>  	ret = sas_queue_event(event, &ev->work, ha);
>  	if (ret != 1) {
>  		pm_runtime_put(ha->dev);
>  		sas_free_event(ev);
>  	}
> -
> -	return ret;
>  }
>  EXPORT_SYMBOL_GPL(sas_notify_phy_event);
> diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
> index b60f0bf612cf..24843db2cb65 100644
> --- a/drivers/scsi/libsas/sas_internal.h
> +++ b/drivers/scsi/libsas/sas_internal.h
> @@ -78,8 +78,6 @@ int sas_smp_phy_control(struct domain_device *dev, int phy_id,
>  			enum phy_func phy_func, struct sas_phy_linkrates *);
>  int sas_smp_get_phy_events(struct sas_phy *phy);
>  
> -int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
> -			 gfp_t flags);
>  void sas_device_set_phy(struct domain_device *dev, struct sas_port *port);
>  struct domain_device *sas_find_dev_by_rphy(struct sas_rphy *rphy);
>  struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_id);
> diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
> index dc529cc92d65..df2c8fc43429 100644
> --- a/include/scsi/libsas.h
> +++ b/include/scsi/libsas.h
> @@ -727,9 +727,9 @@ int sas_lu_reset(struct domain_device *dev, u8 *lun);
>  int sas_query_task(struct sas_task *task, u16 tag);
>  int sas_abort_task(struct sas_task *task, u16 tag);
>  
> -int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
> -			  gfp_t gfp_flags);
> -int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
> -			 gfp_t gfp_flags);
> +void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
> +			   gfp_t gfp_flags);
> +void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
> +			   gfp_t gfp_flags);
>  
>  #endif /* _SASLIB_H_ */
John Garry Feb. 24, 2022, 1:05 p.m. UTC | #2
On 24/02/2022 12:43, Damien Le Moal wrote:
> On 2/24/22 20:04, John Garry wrote:
>> Nobody checks the return codes, so make them return void. Indeed, if the
>> LLDD cannot send an event, nothing much can be done in the LLDD about it.
> 
> It really sound like the LLDDs should be fixed to e.g. reset the adapter
> if things go south with these functions. No sure though.

But this is not an adapter fault. As an example of a scenario which we 
could be dealing with, it may be that a phyup event occurs in the 
adapter but libsas cannot allocate memory to process the event. There's 
not much the adapter/LLDD can do about that (nor does do).

> 
>>
>> Also remove prototype for sas_notify_phy_event() in sas_internal.h, which
>> should not be there.
>>
>> Signed-off-by: John Garry <john.garry@huawei.com>
>> Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com>
> 
> In any case, these changes do not make anything worse :)

Thanks,

> 
> Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
>
diff mbox series

Patch

diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
index 3613b9b315bc..8ff58fd97837 100644
--- a/drivers/scsi/libsas/sas_event.c
+++ b/drivers/scsi/libsas/sas_event.c
@@ -165,8 +165,8 @@  static bool sas_defer_event(struct asd_sas_phy *phy, struct asd_sas_event *ev)
 	return deferred;
 }
 
-int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
-			  gfp_t gfp_flags)
+void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
+			   gfp_t gfp_flags)
 {
 	struct sas_ha_struct *ha = phy->ha;
 	struct asd_sas_event *ev;
@@ -176,7 +176,7 @@  int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
 
 	ev = sas_alloc_event(phy, gfp_flags);
 	if (!ev)
-		return -ENOMEM;
+		return;
 
 	/* Call pm_runtime_put() with pairs in sas_port_event_worker() */
 	pm_runtime_get_noresume(ha->dev);
@@ -184,20 +184,18 @@  int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
 	INIT_SAS_EVENT(ev, sas_port_event_worker, phy, event);
 
 	if (sas_defer_event(phy, ev))
-		return 0;
+		return;
 
 	ret = sas_queue_event(event, &ev->work, ha);
 	if (ret != 1) {
 		pm_runtime_put(ha->dev);
 		sas_free_event(ev);
 	}
-
-	return ret;
 }
 EXPORT_SYMBOL_GPL(sas_notify_port_event);
 
-int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
-			 gfp_t gfp_flags)
+void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
+			  gfp_t gfp_flags)
 {
 	struct sas_ha_struct *ha = phy->ha;
 	struct asd_sas_event *ev;
@@ -207,7 +205,7 @@  int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
 
 	ev = sas_alloc_event(phy, gfp_flags);
 	if (!ev)
-		return -ENOMEM;
+		return;
 
 	/* Call pm_runtime_put() with pairs in sas_phy_event_worker() */
 	pm_runtime_get_noresume(ha->dev);
@@ -215,14 +213,12 @@  int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
 	INIT_SAS_EVENT(ev, sas_phy_event_worker, phy, event);
 
 	if (sas_defer_event(phy, ev))
-		return 0;
+		return;
 
 	ret = sas_queue_event(event, &ev->work, ha);
 	if (ret != 1) {
 		pm_runtime_put(ha->dev);
 		sas_free_event(ev);
 	}
-
-	return ret;
 }
 EXPORT_SYMBOL_GPL(sas_notify_phy_event);
diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
index b60f0bf612cf..24843db2cb65 100644
--- a/drivers/scsi/libsas/sas_internal.h
+++ b/drivers/scsi/libsas/sas_internal.h
@@ -78,8 +78,6 @@  int sas_smp_phy_control(struct domain_device *dev, int phy_id,
 			enum phy_func phy_func, struct sas_phy_linkrates *);
 int sas_smp_get_phy_events(struct sas_phy *phy);
 
-int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
-			 gfp_t flags);
 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port);
 struct domain_device *sas_find_dev_by_rphy(struct sas_rphy *rphy);
 struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_id);
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index dc529cc92d65..df2c8fc43429 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -727,9 +727,9 @@  int sas_lu_reset(struct domain_device *dev, u8 *lun);
 int sas_query_task(struct sas_task *task, u16 tag);
 int sas_abort_task(struct sas_task *task, u16 tag);
 
-int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
-			  gfp_t gfp_flags);
-int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
-			 gfp_t gfp_flags);
+void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
+			   gfp_t gfp_flags);
+void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
+			   gfp_t gfp_flags);
 
 #endif /* _SASLIB_H_ */