Hi Martin,
This is just a couple of small improvements which we had sitting on our
dev branch. Please consider for 5.18.
Changes since v1:
- add RB tag (thanks)
- simplify C code in 2/2
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 | 50 ++++++++++++------------------
drivers/scsi/libsas/sas_internal.h | 4 +--
include/scsi/libsas.h | 8 ++---
3 files changed, 24 insertions(+), 38 deletions(-)
--
2.26.2
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 <[email protected]>
Reviewed-by: Xiang Chen <[email protected]>
Reviewed-by: Damien Le Moal <[email protected]>
---
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
Function queue_work() returns a bool, so use a bool to hold this value
for the return code from callers, which should make the code a tiny bit
more clear.
Also take this opportunity to condense the code of the those callers, such
as sas_queue_work(), as suggested by Damien.
Signed-off-by: John Garry <[email protected]>
---
drivers/scsi/libsas/sas_event.c | 30 +++++++++++-------------------
drivers/scsi/libsas/sas_internal.h | 2 +-
2 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
index 8ff58fd97837..f3a17191a4fe 100644
--- a/drivers/scsi/libsas/sas_event.c
+++ b/drivers/scsi/libsas/sas_event.c
@@ -10,29 +10,26 @@
#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;
-
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);
}
-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 +41,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)) {
pm_runtime_put(ha->dev);
sas_free_event(to_asd_sas_event(&sw->work));
}
@@ -170,7 +166,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 +181,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)) {
pm_runtime_put(ha->dev);
sas_free_event(ev);
}
@@ -199,7 +193,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 +208,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)) {
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
On 2022/02/25 19:57, John Garry wrote:
> Function queue_work() returns a bool, so use a bool to hold this value
> for the return code from callers, which should make the code a tiny bit
> more clear.
>
> Also take this opportunity to condense the code of the those callers, such
> as sas_queue_work(), as suggested by Damien.
>
> Signed-off-by: John Garry <[email protected]>
Looks good to me.
Reviewed-by: Damien Le Moal <[email protected]>
> ---
> drivers/scsi/libsas/sas_event.c | 30 +++++++++++-------------------
> drivers/scsi/libsas/sas_internal.h | 2 +-
> 2 files changed, 12 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
> index 8ff58fd97837..f3a17191a4fe 100644
> --- a/drivers/scsi/libsas/sas_event.c
> +++ b/drivers/scsi/libsas/sas_event.c
> @@ -10,29 +10,26 @@
> #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;
> -
> 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);
> }
>
> -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 +41,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)) {
> pm_runtime_put(ha->dev);
> sas_free_event(to_asd_sas_event(&sw->work));
> }
> @@ -170,7 +166,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 +181,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)) {
> pm_runtime_put(ha->dev);
> sas_free_event(ev);
> }
> @@ -199,7 +193,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 +208,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)) {
> 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
John,
> This is just a couple of small improvements which we had sitting on
> our dev branch. Please consider for 5.18.
Applied to 5.18/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
On Fri, 25 Feb 2022 18:57:34 +0800, John Garry wrote:
> This is just a couple of small improvements which we had sitting on our
> dev branch. Please consider for 5.18.
>
> Changes since v1:
> - add RB tag (thanks)
> - simplify C code in 2/2
>
> [...]
Applied to 5.18/scsi-queue, thanks!
[1/2] scsi: libsas: Make sas_notify_{phy,port}_event() return void
https://git.kernel.org/mkp/scsi/c/f1834fd1635b
[2/2] scsi: libsas: Use bool for queue_work() return code
https://git.kernel.org/mkp/scsi/c/a2a59faa359a
--
Martin K. Petersen Oracle Linux Engineering