Re: [PATCH v2] staging: rtl8723bs: change error handling to use standard errno
From: Dan Carpenter
Date: Sat Mar 21 2026 - 17:25:36 EST
On Sat, Mar 21, 2026 at 09:17:38PM +0100, Omer El Idrissi wrote:
> Replace non-standard return values with descriptive linux kernel error
> codes in probe path.
> Also replace the variable name 'status' with 'ret' to be more
> consistent with other kernel code.
>
> Signed-off-by: Omer El Idrissi <omer.e.idrissi@xxxxxxxxx>
>
> ---
> v2:
> - Return -ENODEV instead of -ENOMEM when sdio_dvobj_init fails
>
> drivers/staging/rtl8723bs/os_dep/sdio_intf.c | 30 ++++++++++++--------
> 1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/staging/rtl8723bs/os_dep/sdio_intf.c b/drivers/staging/rtl8723bs/os_dep/sdio_intf.c
> index d664e254912c..47189c849b05 100644
> --- a/drivers/staging/rtl8723bs/os_dep/sdio_intf.c
> +++ b/drivers/staging/rtl8723bs/os_dep/sdio_intf.c
> @@ -345,38 +345,44 @@ static int rtw_drv_init(
> struct sdio_func *func,
> const struct sdio_device_id *id)
> {
> - int status = _FAIL;
> + int ret;
> struct adapter *if1 = NULL;
> struct dvobj_priv *dvobj;
>
> dvobj = sdio_dvobj_init(func);
> - if (!dvobj)
> + if (!dvobj) {
> + ret = -ENODEV;
> goto exit;
> + }
>
> if1 = rtw_sdio_if1_init(dvobj, id);
> - if (!if1)
> + if (!if1) {
> + ret = -ENOMEM;
> goto free_dvobj;
> + }
>
> /* dev_alloc_name && register_netdev */
> - status = rtw_drv_register_netdev(if1);
> - if (status != _SUCCESS)
> + ret = rtw_drv_register_netdev(if1);
> + if (ret) {
> + ret = -EIO;
> goto free_if1;
> + }
rtw_drv_register_netdev() doesn't return regular error codes
but when you change:
- if (status != _SUCCESS) {
+ if (ret) {
Then you're making it look like it does, which is confusing.
You're going about this the wrong way. You need to start with
functions like _rtw_drv_register_netdev() which are where
the _SUCCESS returns are first returned and change those first.
You have to update the callers as you go. It's tricky because
you have to be sure you're catching all the callers.
Then eventually, you'll get back to rtw_drv_init() and all the
functions it call will return normal error codes and you can
update that.
Do it one function at a time. Update the function and the
callers. Something like this:
regards,
dan carpenter
[patch] update error code for rtw_init_netdev_name()
The rtw_init_netdev_name() returns 1 on failure and 0 on success
which is non-standard. Change it to propagate the error from
dev_alloc_name() and update the only caller.
diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
index 7ba689f2dfc8..92b52b1a2920 100644
--- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
@@ -407,9 +407,12 @@ static const struct net_device_ops rtw_netdev_ops = {
int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
{
- if (dev_alloc_name(pnetdev, ifname) < 0) {
+ int ret;
+
+ ret = dev_alloc_name(pnetdev, ifname);
+ if (ret < 0) {
pr_err("dev_alloc_name, fail for %s\n", ifname);
- return 1;
+ return ret;
}
netif_carrier_off(pnetdev);
/* rtw_netif_stop_queue(pnetdev); */
@@ -755,7 +758,8 @@ static int _rtw_drv_register_netdev(struct adapter *padapter, char *name)
struct net_device *pnetdev = padapter->pnetdev;
/* alloc netdev name */
- if (rtw_init_netdev_name(pnetdev, name))
+ ret = rtw_init_netdev_name(pnetdev, name);
+ if (ret)
return _FAIL;
eth_hw_addr_set(pnetdev, padapter->eeprompriv.mac_addr);