All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] scsi: libsas: Some minor improvements
@ 2022-02-24 11:04 John Garry
  2022-02-24 11:04 ` [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void John Garry
  2022-02-24 11:04 ` [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code John Garry
  0 siblings, 2 replies; 7+ messages in thread
From: John Garry @ 2022-02-24 11:04 UTC (permalink / raw)
  To: jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm, damien.lemoal,
	John Garry

Hi Martin,

This is just a couple of small improvements which we had sitting on our
dev branch. Please consider for 5.18.

Thanks!

John Garry (2):
  scsi: libsas: Make sas_notify_{phy,port}_event() return void
  scsi: libsas: Use bool for queue_work() return code

 drivers/scsi/libsas/sas_event.c    | 43 ++++++++++++------------------
 drivers/scsi/libsas/sas_internal.h |  4 +--
 include/scsi/libsas.h              |  8 +++---
 3 files changed, 22 insertions(+), 33 deletions(-)

-- 
2.26.2


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

* [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void
  2022-02-24 11:04 [PATCH 0/2] scsi: libsas: Some minor improvements John Garry
@ 2022-02-24 11:04 ` John Garry
  2022-02-24 12:43   ` Damien Le Moal
  2022-02-24 11:04 ` [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code John Garry
  1 sibling, 1 reply; 7+ messages in thread
From: John Garry @ 2022-02-24 11:04 UTC (permalink / raw)
  To: jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm, damien.lemoal,
	John Garry

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(-)

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_ */
-- 
2.26.2


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

* [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code
  2022-02-24 11:04 [PATCH 0/2] scsi: libsas: Some minor improvements John Garry
  2022-02-24 11:04 ` [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void John Garry
@ 2022-02-24 11:04 ` John Garry
  2022-02-24 12:49   ` Damien Le Moal
  1 sibling, 1 reply; 7+ messages in thread
From: John Garry @ 2022-02-24 11:04 UTC (permalink / raw)
  To: jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm, damien.lemoal,
	John Garry

Function queue_work() returns a bool, so use a bool to hold this value
for the return code, which should make the code a tiny bit more clear.

Signed-off-by: John Garry <john.garry@huawei.com>
---
 drivers/scsi/libsas/sas_event.c    | 23 +++++++++--------------
 drivers/scsi/libsas/sas_internal.h |  2 +-
 2 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
index 8ff58fd97837..e5eb24100e2d 100644
--- a/drivers/scsi/libsas/sas_event.c
+++ b/drivers/scsi/libsas/sas_event.c
@@ -10,13 +10,13 @@
 #include <scsi/scsi_host.h>
 #include "sas_internal.h"
 
-int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
+bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
 {
 	/* it's added to the defer_q when draining so return succeed */
-	int rc = 1;
+	bool rc = true;
 
 	if (!test_bit(SAS_HA_REGISTERED, &ha->state))
-		return 0;
+		return false;
 
 	if (test_bit(SAS_HA_DRAINING, &ha->state)) {
 		/* add it to the defer list, if not already pending */
@@ -28,11 +28,11 @@ int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
 	return rc;
 }
 
-static int sas_queue_event(int event, struct sas_work *work,
+static bool sas_queue_event(int event, struct sas_work *work,
 			    struct sas_ha_struct *ha)
 {
 	unsigned long flags;
-	int rc;
+	bool rc;
 
 	spin_lock_irqsave(&ha->lock, flags);
 	rc = sas_queue_work(ha, work);
@@ -44,13 +44,12 @@ static int sas_queue_event(int event, struct sas_work *work,
 void sas_queue_deferred_work(struct sas_ha_struct *ha)
 {
 	struct sas_work *sw, *_sw;
-	int ret;
 
 	spin_lock_irq(&ha->lock);
 	list_for_each_entry_safe(sw, _sw, &ha->defer_q, drain_node) {
 		list_del_init(&sw->drain_node);
-		ret = sas_queue_work(ha, sw);
-		if (ret != 1) {
+
+		if (sas_queue_work(ha, sw) == false) {
 			pm_runtime_put(ha->dev);
 			sas_free_event(to_asd_sas_event(&sw->work));
 		}
@@ -170,7 +169,6 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
 {
 	struct sas_ha_struct *ha = phy->ha;
 	struct asd_sas_event *ev;
-	int ret;
 
 	BUG_ON(event >= PORT_NUM_EVENTS);
 
@@ -186,8 +184,7 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
 	if (sas_defer_event(phy, ev))
 		return;
 
-	ret = sas_queue_event(event, &ev->work, ha);
-	if (ret != 1) {
+	if (sas_queue_event(event, &ev->work, ha) == false) {
 		pm_runtime_put(ha->dev);
 		sas_free_event(ev);
 	}
@@ -199,7 +196,6 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
 {
 	struct sas_ha_struct *ha = phy->ha;
 	struct asd_sas_event *ev;
-	int ret;
 
 	BUG_ON(event >= PHY_NUM_EVENTS);
 
@@ -215,8 +211,7 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
 	if (sas_defer_event(phy, ev))
 		return;
 
-	ret = sas_queue_event(event, &ev->work, ha);
-	if (ret != 1) {
+	if (sas_queue_event(event, &ev->work, ha) == false) {
 		pm_runtime_put(ha->dev);
 		sas_free_event(ev);
 	}
diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
index 24843db2cb65..13d0ffaada93 100644
--- a/drivers/scsi/libsas/sas_internal.h
+++ b/drivers/scsi/libsas/sas_internal.h
@@ -67,7 +67,7 @@ void sas_porte_broadcast_rcvd(struct work_struct *work);
 void sas_porte_link_reset_err(struct work_struct *work);
 void sas_porte_timer_event(struct work_struct *work);
 void sas_porte_hard_reset(struct work_struct *work);
-int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw);
+bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw);
 
 int sas_notify_lldd_dev_found(struct domain_device *);
 void sas_notify_lldd_dev_gone(struct domain_device *);
-- 
2.26.2


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

* Re: [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void
  2022-02-24 11:04 ` [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void John Garry
@ 2022-02-24 12:43   ` Damien Le Moal
  2022-02-24 13:05     ` John Garry
  0 siblings, 1 reply; 7+ messages in thread
From: Damien Le Moal @ 2022-02-24 12:43 UTC (permalink / raw)
  To: John Garry, jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm

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_ */


-- 
Damien Le Moal
Western Digital Research

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

* Re: [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code
  2022-02-24 11:04 ` [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code John Garry
@ 2022-02-24 12:49   ` Damien Le Moal
  2022-02-24 13:07     ` John Garry
  0 siblings, 1 reply; 7+ messages in thread
From: Damien Le Moal @ 2022-02-24 12:49 UTC (permalink / raw)
  To: John Garry, jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm

On 2/24/22 20:04, John Garry wrote:
> Function queue_work() returns a bool, so use a bool to hold this value
> for the return code, which should make the code a tiny bit more clear.
> 
> Signed-off-by: John Garry <john.garry@huawei.com>
> ---
>  drivers/scsi/libsas/sas_event.c    | 23 +++++++++--------------
>  drivers/scsi/libsas/sas_internal.h |  2 +-
>  2 files changed, 10 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
> index 8ff58fd97837..e5eb24100e2d 100644
> --- a/drivers/scsi/libsas/sas_event.c
> +++ b/drivers/scsi/libsas/sas_event.c
> @@ -10,13 +10,13 @@
>  #include <scsi/scsi_host.h>
>  #include "sas_internal.h"
>  
> -int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
> +bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>  {
>  	/* it's added to the defer_q when draining so return succeed */
> -	int rc = 1;
> +	bool rc = true;
>  
>  	if (!test_bit(SAS_HA_REGISTERED, &ha->state))
> -		return 0;
> +		return false;
>  
>  	if (test_bit(SAS_HA_DRAINING, &ha->state)) {
>  		/* add it to the defer list, if not already pending */
> @@ -28,11 +28,11 @@ int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>  	return rc;

While at it, I would cleanup this function like this:

diff --git a/drivers/scsi/libsas/sas_event.c
b/drivers/scsi/libsas/sas_event.c
index 3613b9b315bc..38e6e91aaf36 100644
--- a/drivers/scsi/libsas/sas_event.c
+++ b/drivers/scsi/libsas/sas_event.c
@@ -12,20 +12,17 @@

 int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
 {
-       /* it's added to the defer_q when draining so return succeed */
-       int rc = 1;
-
        if (!test_bit(SAS_HA_REGISTERED, &ha->state))
-               return 0;
+               return false;

        if (test_bit(SAS_HA_DRAINING, &ha->state)) {
                /* add it to the defer list, if not already pending */
                if (list_empty(&sw->drain_node))
                        list_add_tail(&sw->drain_node, &ha->defer_q);
-       } else
-               rc = queue_work(ha->event_q, &sw->work);
+               return true;
+       }

-       return rc;
+       return queue_work(ha->event_q, &sw->work);
 }

No local variable :)

>  }
>  
> -static int sas_queue_event(int event, struct sas_work *work,
> +static bool sas_queue_event(int event, struct sas_work *work,
>  			    struct sas_ha_struct *ha)
>  {
>  	unsigned long flags;
> -	int rc;
> +	bool rc;
>  
>  	spin_lock_irqsave(&ha->lock, flags);
>  	rc = sas_queue_work(ha, work);
> @@ -44,13 +44,12 @@ static int sas_queue_event(int event, struct sas_work *work,
>  void sas_queue_deferred_work(struct sas_ha_struct *ha)
>  {
>  	struct sas_work *sw, *_sw;
> -	int ret;
>  
>  	spin_lock_irq(&ha->lock);
>  	list_for_each_entry_safe(sw, _sw, &ha->defer_q, drain_node) {
>  		list_del_init(&sw->drain_node);
> -		ret = sas_queue_work(ha, sw);
> -		if (ret != 1) {
> +
> +		if (sas_queue_work(ha, sw) == false) {

if (!sas_queue_work(ha, sw)) ?

>  			pm_runtime_put(ha->dev);
>  			sas_free_event(to_asd_sas_event(&sw->work));
>  		}
> @@ -170,7 +169,6 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>  {
>  	struct sas_ha_struct *ha = phy->ha;
>  	struct asd_sas_event *ev;
> -	int ret;
>  
>  	BUG_ON(event >= PORT_NUM_EVENTS);
>  
> @@ -186,8 +184,7 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>  	if (sas_defer_event(phy, ev))
>  		return;
>  
> -	ret = sas_queue_event(event, &ev->work, ha);
> -	if (ret != 1) {
> +	if (sas_queue_event(event, &ev->work, ha) == false) {

Same.

>  		pm_runtime_put(ha->dev);
>  		sas_free_event(ev);
>  	}
> @@ -199,7 +196,6 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>  {
>  	struct sas_ha_struct *ha = phy->ha;
>  	struct asd_sas_event *ev;
> -	int ret;
>  
>  	BUG_ON(event >= PHY_NUM_EVENTS);
>  
> @@ -215,8 +211,7 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>  	if (sas_defer_event(phy, ev))
>  		return;
>  
> -	ret = sas_queue_event(event, &ev->work, ha);
> -	if (ret != 1) {
> +	if (sas_queue_event(event, &ev->work, ha) == false) {

And again.

>  		pm_runtime_put(ha->dev);
>  		sas_free_event(ev);
>  	}
> diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
> index 24843db2cb65..13d0ffaada93 100644
> --- a/drivers/scsi/libsas/sas_internal.h
> +++ b/drivers/scsi/libsas/sas_internal.h
> @@ -67,7 +67,7 @@ void sas_porte_broadcast_rcvd(struct work_struct *work);
>  void sas_porte_link_reset_err(struct work_struct *work);
>  void sas_porte_timer_event(struct work_struct *work);
>  void sas_porte_hard_reset(struct work_struct *work);
> -int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw);
> +bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw);
>  
>  int sas_notify_lldd_dev_found(struct domain_device *);
>  void sas_notify_lldd_dev_gone(struct domain_device *);


-- 
Damien Le Moal
Western Digital Research

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

* Re: [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void
  2022-02-24 12:43   ` Damien Le Moal
@ 2022-02-24 13:05     ` John Garry
  0 siblings, 0 replies; 7+ messages in thread
From: John Garry @ 2022-02-24 13:05 UTC (permalink / raw)
  To: Damien Le Moal, jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm

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

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

* Re: [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code
  2022-02-24 12:49   ` Damien Le Moal
@ 2022-02-24 13:07     ` John Garry
  0 siblings, 0 replies; 7+ messages in thread
From: John Garry @ 2022-02-24 13:07 UTC (permalink / raw)
  To: Damien Le Moal, jejb, martin.petersen
  Cc: chenxiang66, linux-scsi, linux-kernel, linuxarm

>> -int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>> +bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>>   {
>>   	/* it's added to the defer_q when draining so return succeed */
>> -	int rc = 1;
>> +	bool rc = true;
>>   
>>   	if (!test_bit(SAS_HA_REGISTERED, &ha->state))
>> -		return 0;
>> +		return false;
>>   
>>   	if (test_bit(SAS_HA_DRAINING, &ha->state)) {
>>   		/* add it to the defer list, if not already pending */
>> @@ -28,11 +28,11 @@ int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>>   	return rc;
> 
> While at it, I would cleanup this function like this:

ok, fine

> 
> diff --git a/drivers/scsi/libsas/sas_event.c
> b/drivers/scsi/libsas/sas_event.c
> index 3613b9b315bc..38e6e91aaf36 100644
> --- a/drivers/scsi/libsas/sas_event.c
> +++ b/drivers/scsi/libsas/sas_event.c
> @@ -12,20 +12,17 @@
> 
>   int sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)
>   {
> -       /* it's added to the defer_q when draining so return succeed */
> -       int rc = 1;
> -
>          if (!test_bit(SAS_HA_REGISTERED, &ha->state))
> -               return 0;
> +               return false;
> 
>          if (test_bit(SAS_HA_DRAINING, &ha->state)) {
>                  /* add it to the defer list, if not already pending */
>                  if (list_empty(&sw->drain_node))
>                          list_add_tail(&sw->drain_node, &ha->defer_q);
> -       } else
> -               rc = queue_work(ha->event_q, &sw->work);
> +               return true;
> +       }
> 
> -       return rc;
> +       return queue_work(ha->event_q, &sw->work);
>   }
> 
> No local variable :)
> 
>>   }
>>   
>> -static int sas_queue_event(int event, struct sas_work *work,
>> +static bool sas_queue_event(int event, struct sas_work *work,
>>   			    struct sas_ha_struct *ha)
>>   {
>>   	unsigned long flags;
>> -	int rc;
>> +	bool rc;
>>   
>>   	spin_lock_irqsave(&ha->lock, flags);
>>   	rc = sas_queue_work(ha, work);
>> @@ -44,13 +44,12 @@ static int sas_queue_event(int event, struct sas_work *work,
>>   void sas_queue_deferred_work(struct sas_ha_struct *ha)
>>   {
>>   	struct sas_work *sw, *_sw;
>> -	int ret;
>>   
>>   	spin_lock_irq(&ha->lock);
>>   	list_for_each_entry_safe(sw, _sw, &ha->defer_q, drain_node) {
>>   		list_del_init(&sw->drain_node);
>> -		ret = sas_queue_work(ha, sw);
>> -		if (ret != 1) {
>> +
>> +		if (sas_queue_work(ha, sw) == false) {
> 
> if (!sas_queue_work(ha, sw)) ?

ok, yeah, that's the pattern I see elsehwhere in the kernel

> 
>>   			pm_runtime_put(ha->dev);
>>   			sas_free_event(to_asd_sas_event(&sw->work));
>>   		}
>> @@ -170,7 +169,6 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>>   {
>>   	struct sas_ha_struct *ha = phy->ha;
>>   	struct asd_sas_event *ev;
>> -	int ret;
>>   
>>   	BUG_ON(event >= PORT_NUM_EVENTS);
>>   
>> @@ -186,8 +184,7 @@ void sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event,
>>   	if (sas_defer_event(phy, ev))
>>   		return;
>>   
>> -	ret = sas_queue_event(event, &ev->work, ha);
>> -	if (ret != 1) {
>> +	if (sas_queue_event(event, &ev->work, ha) == false) {
> 
> Same.
> 
>>   		pm_runtime_put(ha->dev);
>>   		sas_free_event(ev);
>>   	}
>> @@ -199,7 +196,6 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>>   {
>>   	struct sas_ha_struct *ha = phy->ha;
>>   	struct asd_sas_event *ev;
>> -	int ret;
>>   
>>   	BUG_ON(event >= PHY_NUM_EVENTS);
>>   
>> @@ -215,8 +211,7 @@ void sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event,
>>   	if (sas_defer_event(phy, ev))
>>   		return;
>>   
>> -	ret = sas_queue_event(event, &ev->work, ha);
>> -	if (ret != 1) {
>> +	if (sas_queue_event(event, &ev->work, ha) == false) {
> 
> And again.
> 

ok, thanks

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

end of thread, other threads:[~2022-02-24 13:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-24 11:04 [PATCH 0/2] scsi: libsas: Some minor improvements John Garry
2022-02-24 11:04 ` [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void John Garry
2022-02-24 12:43   ` Damien Le Moal
2022-02-24 13:05     ` John Garry
2022-02-24 11:04 ` [PATCH 2/2] scsi: libsas: Use bool for queue_work() return code John Garry
2022-02-24 12:49   ` Damien Le Moal
2022-02-24 13:07     ` John Garry

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.