Commit 5346c35e authored by Sven Eckelmann's avatar Sven Eckelmann Committed by Antonio Quartulli

batman-adv: Return error codes instead of -1 on failures

Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
parent e0f5211f
...@@ -195,13 +195,13 @@ static int debug_log_setup(struct bat_priv *bat_priv) ...@@ -195,13 +195,13 @@ static int debug_log_setup(struct bat_priv *bat_priv)
d = debugfs_create_file("log", S_IFREG | S_IRUSR, d = debugfs_create_file("log", S_IFREG | S_IRUSR,
bat_priv->debug_dir, bat_priv, &log_fops); bat_priv->debug_dir, bat_priv, &log_fops);
if (d) if (!d)
goto err; goto err;
return 0; return 0;
err: err:
return 1; return -ENOMEM;
} }
static void debug_log_cleanup(struct bat_priv *bat_priv) static void debug_log_cleanup(struct bat_priv *bat_priv)
...@@ -348,8 +348,11 @@ int debugfs_add_meshif(struct net_device *dev) ...@@ -348,8 +348,11 @@ int debugfs_add_meshif(struct net_device *dev)
if (!bat_priv->debug_dir) if (!bat_priv->debug_dir)
goto out; goto out;
bat_socket_setup(bat_priv); if (bat_socket_setup(bat_priv) < 0)
debug_log_setup(bat_priv); goto rem_attr;
if (debug_log_setup(bat_priv) < 0)
goto rem_attr;
for (bat_debug = mesh_debuginfos; *bat_debug; ++bat_debug) { for (bat_debug = mesh_debuginfos; *bat_debug; ++bat_debug) {
file = debugfs_create_file(((*bat_debug)->attr).name, file = debugfs_create_file(((*bat_debug)->attr).name,
......
...@@ -60,7 +60,7 @@ static int bat_iv_ogm_iface_enable(struct hard_iface *hard_iface) ...@@ -60,7 +60,7 @@ static int bat_iv_ogm_iface_enable(struct hard_iface *hard_iface)
{ {
struct batman_ogm_packet *batman_ogm_packet; struct batman_ogm_packet *batman_ogm_packet;
uint32_t random_seqno; uint32_t random_seqno;
int res = -1; int res = -ENOMEM;
/* randomize initial seqno to avoid collision */ /* randomize initial seqno to avoid collision */
get_random_bytes(&random_seqno, sizeof(random_seqno)); get_random_bytes(&random_seqno, sizeof(random_seqno));
......
...@@ -680,7 +680,7 @@ void sysfs_del_hardif(struct kobject **hardif_obj) ...@@ -680,7 +680,7 @@ void sysfs_del_hardif(struct kobject **hardif_obj)
int throw_uevent(struct bat_priv *bat_priv, enum uev_type type, int throw_uevent(struct bat_priv *bat_priv, enum uev_type type,
enum uev_action action, const char *data) enum uev_action action, const char *data)
{ {
int ret = -1; int ret = -ENOMEM;
struct hard_iface *primary_if = NULL; struct hard_iface *primary_if = NULL;
struct kobject *bat_kobj; struct kobject *bat_kobj;
char *uevent_env[4] = { NULL, NULL, NULL, NULL }; char *uevent_env[4] = { NULL, NULL, NULL, NULL };
......
...@@ -1164,13 +1164,13 @@ int bla_init(struct bat_priv *bat_priv) ...@@ -1164,13 +1164,13 @@ int bla_init(struct bat_priv *bat_priv)
bat_priv->bcast_duplist_curr = 0; bat_priv->bcast_duplist_curr = 0;
if (bat_priv->claim_hash) if (bat_priv->claim_hash)
return 1; return 0;
bat_priv->claim_hash = hash_new(128); bat_priv->claim_hash = hash_new(128);
bat_priv->backbone_hash = hash_new(32); bat_priv->backbone_hash = hash_new(32);
if (!bat_priv->claim_hash || !bat_priv->backbone_hash) if (!bat_priv->claim_hash || !bat_priv->backbone_hash)
return -1; return -ENOMEM;
batadv_hash_set_lock_class(bat_priv->claim_hash, batadv_hash_set_lock_class(bat_priv->claim_hash,
&claim_hash_lock_class_key); &claim_hash_lock_class_key);
...@@ -1180,7 +1180,7 @@ int bla_init(struct bat_priv *bat_priv) ...@@ -1180,7 +1180,7 @@ int bla_init(struct bat_priv *bat_priv)
bat_dbg(DBG_BLA, bat_priv, "bla hashes initialized\n"); bat_dbg(DBG_BLA, bat_priv, "bla hashes initialized\n");
bla_start_timer(bat_priv); bla_start_timer(bat_priv);
return 1; return 0;
} }
/** /**
......
...@@ -306,10 +306,8 @@ int hardif_enable_interface(struct hard_iface *hard_iface, ...@@ -306,10 +306,8 @@ int hardif_enable_interface(struct hard_iface *hard_iface,
bat_priv = netdev_priv(hard_iface->soft_iface); bat_priv = netdev_priv(hard_iface->soft_iface);
ret = bat_priv->bat_algo_ops->bat_iface_enable(hard_iface); ret = bat_priv->bat_algo_ops->bat_iface_enable(hard_iface);
if (ret < 0) { if (ret < 0)
ret = -ENOMEM;
goto err_dev; goto err_dev;
}
hard_iface->if_num = bat_priv->num_ifaces; hard_iface->if_num = bat_priv->num_ifaces;
bat_priv->num_ifaces++; bat_priv->num_ifaces++;
......
...@@ -285,13 +285,13 @@ int bat_socket_setup(struct bat_priv *bat_priv) ...@@ -285,13 +285,13 @@ int bat_socket_setup(struct bat_priv *bat_priv)
d = debugfs_create_file(ICMP_SOCKET, S_IFREG | S_IWUSR | S_IRUSR, d = debugfs_create_file(ICMP_SOCKET, S_IFREG | S_IWUSR | S_IRUSR,
bat_priv->debug_dir, bat_priv, &fops); bat_priv->debug_dir, bat_priv, &fops);
if (d) if (!d)
goto err; goto err;
return 0; return 0;
err: err:
return 1; return -ENOMEM;
} }
static void bat_socket_add_packet(struct socket_client *socket_client, static void bat_socket_add_packet(struct socket_client *socket_client,
......
...@@ -92,6 +92,7 @@ static void __exit batman_exit(void) ...@@ -92,6 +92,7 @@ static void __exit batman_exit(void)
int mesh_init(struct net_device *soft_iface) int mesh_init(struct net_device *soft_iface)
{ {
struct bat_priv *bat_priv = netdev_priv(soft_iface); struct bat_priv *bat_priv = netdev_priv(soft_iface);
int ret;
spin_lock_init(&bat_priv->forw_bat_list_lock); spin_lock_init(&bat_priv->forw_bat_list_lock);
spin_lock_init(&bat_priv->forw_bcast_list_lock); spin_lock_init(&bat_priv->forw_bcast_list_lock);
...@@ -110,30 +111,32 @@ int mesh_init(struct net_device *soft_iface) ...@@ -110,30 +111,32 @@ int mesh_init(struct net_device *soft_iface)
INIT_LIST_HEAD(&bat_priv->tt_req_list); INIT_LIST_HEAD(&bat_priv->tt_req_list);
INIT_LIST_HEAD(&bat_priv->tt_roam_list); INIT_LIST_HEAD(&bat_priv->tt_roam_list);
if (originator_init(bat_priv) < 1) ret = originator_init(bat_priv);
if (ret < 0)
goto err; goto err;
if (tt_init(bat_priv) < 1) ret = tt_init(bat_priv);
if (ret < 0)
goto err; goto err;
tt_local_add(soft_iface, soft_iface->dev_addr, NULL_IFINDEX); tt_local_add(soft_iface, soft_iface->dev_addr, NULL_IFINDEX);
if (vis_init(bat_priv) < 1) ret = vis_init(bat_priv);
if (ret < 0)
goto err; goto err;
if (bla_init(bat_priv) < 1) ret = bla_init(bat_priv);
if (ret < 0)
goto err; goto err;
atomic_set(&bat_priv->gw_reselect, 0); atomic_set(&bat_priv->gw_reselect, 0);
atomic_set(&bat_priv->mesh_state, MESH_ACTIVE); atomic_set(&bat_priv->mesh_state, MESH_ACTIVE);
goto end;
return 0;
err: err:
mesh_free(soft_iface); mesh_free(soft_iface);
return -1; return ret;
end:
return 0;
} }
void mesh_free(struct net_device *soft_iface) void mesh_free(struct net_device *soft_iface)
...@@ -319,12 +322,13 @@ static struct bat_algo_ops *bat_algo_get(char *name) ...@@ -319,12 +322,13 @@ static struct bat_algo_ops *bat_algo_get(char *name)
int bat_algo_register(struct bat_algo_ops *bat_algo_ops) int bat_algo_register(struct bat_algo_ops *bat_algo_ops)
{ {
struct bat_algo_ops *bat_algo_ops_tmp; struct bat_algo_ops *bat_algo_ops_tmp;
int ret = -1; int ret;
bat_algo_ops_tmp = bat_algo_get(bat_algo_ops->name); bat_algo_ops_tmp = bat_algo_get(bat_algo_ops->name);
if (bat_algo_ops_tmp) { if (bat_algo_ops_tmp) {
pr_info("Trying to register already registered routing algorithm: %s\n", pr_info("Trying to register already registered routing algorithm: %s\n",
bat_algo_ops->name); bat_algo_ops->name);
ret = -EEXIST;
goto out; goto out;
} }
...@@ -337,6 +341,7 @@ int bat_algo_register(struct bat_algo_ops *bat_algo_ops) ...@@ -337,6 +341,7 @@ int bat_algo_register(struct bat_algo_ops *bat_algo_ops)
!bat_algo_ops->bat_ogm_emit) { !bat_algo_ops->bat_ogm_emit) {
pr_info("Routing algo '%s' does not implement required ops\n", pr_info("Routing algo '%s' does not implement required ops\n",
bat_algo_ops->name); bat_algo_ops->name);
ret = -EINVAL;
goto out; goto out;
} }
...@@ -351,7 +356,7 @@ int bat_algo_register(struct bat_algo_ops *bat_algo_ops) ...@@ -351,7 +356,7 @@ int bat_algo_register(struct bat_algo_ops *bat_algo_ops)
int bat_algo_select(struct bat_priv *bat_priv, char *name) int bat_algo_select(struct bat_priv *bat_priv, char *name)
{ {
struct bat_algo_ops *bat_algo_ops; struct bat_algo_ops *bat_algo_ops;
int ret = -1; int ret = -EINVAL;
bat_algo_ops = bat_algo_get(name); bat_algo_ops = bat_algo_get(name);
if (!bat_algo_ops) if (!bat_algo_ops)
......
...@@ -50,7 +50,7 @@ static int compare_orig(const struct hlist_node *node, const void *data2) ...@@ -50,7 +50,7 @@ static int compare_orig(const struct hlist_node *node, const void *data2)
int originator_init(struct bat_priv *bat_priv) int originator_init(struct bat_priv *bat_priv)
{ {
if (bat_priv->orig_hash) if (bat_priv->orig_hash)
return 1; return 0;
bat_priv->orig_hash = hash_new(1024); bat_priv->orig_hash = hash_new(1024);
...@@ -58,10 +58,10 @@ int originator_init(struct bat_priv *bat_priv) ...@@ -58,10 +58,10 @@ int originator_init(struct bat_priv *bat_priv)
goto err; goto err;
start_purge_timer(bat_priv); start_purge_timer(bat_priv);
return 1; return 0;
err: err:
return 0; return -ENOMEM;
} }
void neigh_node_free_ref(struct neigh_node *neigh_node) void neigh_node_free_ref(struct neigh_node *neigh_node)
...@@ -488,7 +488,7 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num) ...@@ -488,7 +488,7 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num)
data_ptr = kmalloc(max_if_num * sizeof(unsigned long) * NUM_WORDS, data_ptr = kmalloc(max_if_num * sizeof(unsigned long) * NUM_WORDS,
GFP_ATOMIC); GFP_ATOMIC);
if (!data_ptr) if (!data_ptr)
return -1; return -ENOMEM;
memcpy(data_ptr, orig_node->bcast_own, memcpy(data_ptr, orig_node->bcast_own,
(max_if_num - 1) * sizeof(unsigned long) * NUM_WORDS); (max_if_num - 1) * sizeof(unsigned long) * NUM_WORDS);
...@@ -497,7 +497,7 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num) ...@@ -497,7 +497,7 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num)
data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC);
if (!data_ptr) if (!data_ptr)
return -1; return -ENOMEM;
memcpy(data_ptr, orig_node->bcast_own_sum, memcpy(data_ptr, orig_node->bcast_own_sum,
(max_if_num - 1) * sizeof(uint8_t)); (max_if_num - 1) * sizeof(uint8_t));
...@@ -528,7 +528,7 @@ int orig_hash_add_if(struct hard_iface *hard_iface, int max_if_num) ...@@ -528,7 +528,7 @@ int orig_hash_add_if(struct hard_iface *hard_iface, int max_if_num)
ret = orig_node_add_if(orig_node, max_if_num); ret = orig_node_add_if(orig_node, max_if_num);
spin_unlock_bh(&orig_node->ogm_cnt_lock); spin_unlock_bh(&orig_node->ogm_cnt_lock);
if (ret == -1) if (ret == -ENOMEM)
goto err; goto err;
} }
rcu_read_unlock(); rcu_read_unlock();
...@@ -554,7 +554,7 @@ static int orig_node_del_if(struct orig_node *orig_node, ...@@ -554,7 +554,7 @@ static int orig_node_del_if(struct orig_node *orig_node,
chunk_size = sizeof(unsigned long) * NUM_WORDS; chunk_size = sizeof(unsigned long) * NUM_WORDS;
data_ptr = kmalloc(max_if_num * chunk_size, GFP_ATOMIC); data_ptr = kmalloc(max_if_num * chunk_size, GFP_ATOMIC);
if (!data_ptr) if (!data_ptr)
return -1; return -ENOMEM;
/* copy first part */ /* copy first part */
memcpy(data_ptr, orig_node->bcast_own, del_if_num * chunk_size); memcpy(data_ptr, orig_node->bcast_own, del_if_num * chunk_size);
...@@ -573,7 +573,7 @@ static int orig_node_del_if(struct orig_node *orig_node, ...@@ -573,7 +573,7 @@ static int orig_node_del_if(struct orig_node *orig_node,
data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC);
if (!data_ptr) if (!data_ptr)
return -1; return -ENOMEM;
memcpy(data_ptr, orig_node->bcast_own_sum, memcpy(data_ptr, orig_node->bcast_own_sum,
del_if_num * sizeof(uint8_t)); del_if_num * sizeof(uint8_t));
...@@ -612,7 +612,7 @@ int orig_hash_del_if(struct hard_iface *hard_iface, int max_if_num) ...@@ -612,7 +612,7 @@ int orig_hash_del_if(struct hard_iface *hard_iface, int max_if_num)
hard_iface->if_num); hard_iface->if_num);
spin_unlock_bh(&orig_node->ogm_cnt_lock); spin_unlock_bh(&orig_node->ogm_cnt_lock);
if (ret == -1) if (ret == -ENOMEM)
goto err; goto err;
} }
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -181,14 +181,14 @@ int tt_len(int changes_num) ...@@ -181,14 +181,14 @@ int tt_len(int changes_num)
static int tt_local_init(struct bat_priv *bat_priv) static int tt_local_init(struct bat_priv *bat_priv)
{ {
if (bat_priv->tt_local_hash) if (bat_priv->tt_local_hash)
return 1; return 0;
bat_priv->tt_local_hash = hash_new(1024); bat_priv->tt_local_hash = hash_new(1024);
if (!bat_priv->tt_local_hash) if (!bat_priv->tt_local_hash)
return 0; return -ENOMEM;
return 1; return 0;
} }
void tt_local_add(struct net_device *soft_iface, const uint8_t *addr, void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
...@@ -491,14 +491,14 @@ static void tt_local_table_free(struct bat_priv *bat_priv) ...@@ -491,14 +491,14 @@ static void tt_local_table_free(struct bat_priv *bat_priv)
static int tt_global_init(struct bat_priv *bat_priv) static int tt_global_init(struct bat_priv *bat_priv)
{ {
if (bat_priv->tt_global_hash) if (bat_priv->tt_global_hash)
return 1; return 0;
bat_priv->tt_global_hash = hash_new(1024); bat_priv->tt_global_hash = hash_new(1024);
if (!bat_priv->tt_global_hash) if (!bat_priv->tt_global_hash)
return 0; return -ENOMEM;
return 1; return 0;
} }
static void tt_changes_list_free(struct bat_priv *bat_priv) static void tt_changes_list_free(struct bat_priv *bat_priv)
...@@ -1773,11 +1773,15 @@ void handle_tt_response(struct bat_priv *bat_priv, ...@@ -1773,11 +1773,15 @@ void handle_tt_response(struct bat_priv *bat_priv,
int tt_init(struct bat_priv *bat_priv) int tt_init(struct bat_priv *bat_priv)
{ {
if (!tt_local_init(bat_priv)) int ret;
return 0;
if (!tt_global_init(bat_priv)) ret = tt_local_init(bat_priv);
return 0; if (ret < 0)
return ret;
ret = tt_global_init(bat_priv);
if (ret < 0)
return ret;
tt_start_timer(bat_priv); tt_start_timer(bat_priv);
......
...@@ -626,7 +626,7 @@ static int generate_vis_packet(struct bat_priv *bat_priv) ...@@ -626,7 +626,7 @@ static int generate_vis_packet(struct bat_priv *bat_priv)
best_tq = find_best_vis_server(bat_priv, info); best_tq = find_best_vis_server(bat_priv, info);
if (best_tq < 0) if (best_tq < 0)
return -1; return best_tq;
} }
for (i = 0; i < hash->size; i++) { for (i = 0; i < hash->size; i++) {
...@@ -878,7 +878,7 @@ int vis_init(struct bat_priv *bat_priv) ...@@ -878,7 +878,7 @@ int vis_init(struct bat_priv *bat_priv)
int hash_added; int hash_added;
if (bat_priv->vis_hash) if (bat_priv->vis_hash)
return 1; return 0;
spin_lock_bh(&bat_priv->vis_hash_lock); spin_lock_bh(&bat_priv->vis_hash_lock);
...@@ -929,7 +929,7 @@ int vis_init(struct bat_priv *bat_priv) ...@@ -929,7 +929,7 @@ int vis_init(struct bat_priv *bat_priv)
spin_unlock_bh(&bat_priv->vis_hash_lock); spin_unlock_bh(&bat_priv->vis_hash_lock);
start_vis_timer(bat_priv); start_vis_timer(bat_priv);
return 1; return 0;
free_info: free_info:
kfree(bat_priv->my_vis_info); kfree(bat_priv->my_vis_info);
...@@ -937,7 +937,7 @@ int vis_init(struct bat_priv *bat_priv) ...@@ -937,7 +937,7 @@ int vis_init(struct bat_priv *bat_priv)
err: err:
spin_unlock_bh(&bat_priv->vis_hash_lock); spin_unlock_bh(&bat_priv->vis_hash_lock);
vis_quit(bat_priv); vis_quit(bat_priv);
return 0; return -ENOMEM;
} }
/* Decrease the reference count on a hash item info */ /* Decrease the reference count on a hash item info */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment