lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 24 Feb 2022 21:43:43 +0900
From:   Damien Le Moal <damien.lemoal@...nsource.wdc.com>
To:     John Garry <john.garry@...wei.com>, jejb@...ux.ibm.com,
        martin.petersen@...cle.com
Cc:     chenxiang66@...ilicon.com, linux-scsi@...r.kernel.org,
        linux-kernel@...r.kernel.org, linuxarm@...wei.com
Subject: Re: [PATCH 1/2] scsi: libsas: Make sas_notify_{phy,port}_event()
 return void

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@...wei.com>
> Reviewed-by: Xiang Chen <chenxiang66@...ilicon.com>

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

Reviewed-by: Damien Le Moal <damien.lemoal@...nsource.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ