From: Johannes Berg <[email protected]>

In order to return more accurate error numbers instead of assuming
that all errors are actually -ENOMEM, return an ERR_PTR() from the
function instead of NULL for errors.

Signed-off-by: Johannes Berg <[email protected]>
---
 net/mac80211/cfg.c        |  4 ++--
 net/mac80211/ibss.c       |  4 ++--
 net/mac80211/iface.c      |  4 ++--
 net/mac80211/mesh_plink.c |  2 +-
 net/mac80211/mlme.c       |  4 ++--
 net/mac80211/ocb.c        |  2 +-
 net/mac80211/sta_info.c   | 17 +++++++++++------
 7 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 1b91fcd0aa11..453bac0c0953 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1252,8 +1252,8 @@ static int ieee80211_add_station(struct wiphy *wiphy, 
struct net_device *dev,
                return -EINVAL;
 
        sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
-       if (!sta)
-               return -ENOMEM;
+       if (IS_ERR(sta))
+               return PTR_ERR(sta);
 
        /*
         * defaults -- if userspace wants something else we'll
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index 7f72bc9bae2e..f2f7d3f456e1 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -641,7 +641,7 @@ ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, 
const u8 *bssid,
        rcu_read_unlock();
 
        sta = sta_info_alloc(sdata, addr, GFP_KERNEL);
-       if (!sta) {
+       if (IS_ERR(sta)) {
                rcu_read_lock();
                return NULL;
        }
@@ -1231,7 +1231,7 @@ void ieee80211_ibss_rx_no_sta(struct 
ieee80211_sub_if_data *sdata,
        rcu_read_unlock();
 
        sta = sta_info_alloc(sdata, addr, GFP_ATOMIC);
-       if (!sta)
+       if (IS_ERR(sta))
                return;
 
        sta->last_rx = jiffies;
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 42d7f0f65bd6..7e3a04bccffe 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -674,8 +674,8 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool 
coming_up)
                /* Create STA entry for the WDS peer */
                sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
                                     GFP_KERNEL);
-               if (!sta) {
-                       res = -ENOMEM;
+               if (IS_ERR(sta)) {
+                       res = PTR_ERR(sta);
                        goto err_del_interface;
                }
 
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index a360b24b7df8..abc184a8298f 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -471,7 +471,7 @@ __mesh_sta_info_alloc(struct ieee80211_sub_if_data *sdata, 
u8 *hw_addr)
                return NULL;
 
        sta = sta_info_alloc(sdata, hw_addr, GFP_KERNEL);
-       if (!sta)
+       if (IS_ERR(sta))
                return NULL;
 
        sta->mesh->plink_state = NL80211_PLINK_LISTEN;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 88047bf6c0e0..5a13e27e4ea3 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -4330,8 +4330,8 @@ static int ieee80211_prep_connection(struct 
ieee80211_sub_if_data *sdata,
 
        if (!have_sta) {
                new_sta = sta_info_alloc(sdata, cbss->bssid, GFP_KERNEL);
-               if (!new_sta)
-                       return -ENOMEM;
+               if (IS_ERR(new_sta))
+                       return PTR_ERR(new_sta);
        }
 
        if (new_sta || override) {
diff --git a/net/mac80211/ocb.c b/net/mac80211/ocb.c
index 573b81a1fb2d..470da635eec4 100644
--- a/net/mac80211/ocb.c
+++ b/net/mac80211/ocb.c
@@ -72,7 +72,7 @@ void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data 
*sdata,
        rcu_read_unlock();
 
        sta = sta_info_alloc(sdata, addr, GFP_ATOMIC);
-       if (!sta)
+       if (IS_ERR(sta))
                return;
 
        sta->last_rx = jiffies;
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 64f1936350c6..c54dbcaa97b6 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -304,11 +304,11 @@ struct sta_info *sta_info_alloc(struct 
ieee80211_sub_if_data *sdata,
        struct ieee80211_hw *hw = &local->hw;
        struct sta_info *sta;
        struct timespec uptime;
-       int i;
+       int i, ret;
 
        sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
        if (!sta)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        spin_lock_init(&sta->lock);
        spin_lock_init(&sta->ps_lock);
@@ -318,8 +318,10 @@ struct sta_info *sta_info_alloc(struct 
ieee80211_sub_if_data *sdata,
 #ifdef CONFIG_MAC80211_MESH
        if (ieee80211_vif_is_mesh(&sdata->vif)) {
                sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
-               if (!sta->mesh)
+               if (!sta->mesh) {
+                       ret = -ENOMEM;
                        goto free;
+               }
                spin_lock_init(&sta->mesh->plink_lock);
                if (ieee80211_vif_is_mesh(&sdata->vif) &&
                    !sdata->u.mesh.user_mpm)
@@ -351,8 +353,10 @@ struct sta_info *sta_info_alloc(struct 
ieee80211_sub_if_data *sdata,
                           ALIGN(hw->txq_data_size, sizeof(void *));
 
                txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp);
-               if (!txq_data)
+               if (!txq_data) {
+                       ret = -ENOMEM;
                        goto free;
+               }
 
                for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
                        struct txq_info *txq = txq_data + i * size;
@@ -361,7 +365,8 @@ struct sta_info *sta_info_alloc(struct 
ieee80211_sub_if_data *sdata,
                }
        }
 
-       if (sta_prepare_rate_control(local, sta, gfp))
+       ret = sta_prepare_rate_control(local, sta, gfp);
+       if (ret)
                goto free_txq;
 
        for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
@@ -418,7 +423,7 @@ free:
        kfree(sta->mesh);
 #endif
        kfree(sta);
-       return NULL;
+       return ERR_PTR(ret);
 }
 
 static int sta_info_insert_check(struct sta_info *sta)
-- 
2.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to