[PATCH batadv] batman-adv: convert cancellation of work items to disable helper
Sven Eckelmann <[email protected]>
| Newsgroups | org.open-mesh.lists.batman |
|---|---|
| Message-ID | <[email protected]> |
With commit 86898fa6b8cd ("workqueue: Implement disable/enable for
(delayed) work items"), work queues gained the ability to permanently
disallow re-queuing of work items. This is particularly important during
object teardown, where a work item must not be re-armed after shutdown
begins.
Convert all cancel_work_sync() and cancel_delayed_work_sync() call sites to
their disable_* equivalents to clarify the intent to prevent re-arming
after teardown.
Signed-off-by: Sven Eckelmann <[email protected]>
---
net/batman-adv/bat_iv_ogm.c | 2 +-
net/batman-adv/bat_v.c | 2 ++
net/batman-adv/bat_v_elp.c | 6 +++---
net/batman-adv/bat_v_ogm.c | 6 ++++--
net/batman-adv/bridge_loop_avoidance.c | 4 ++--
net/batman-adv/distributed-arp-table.c | 2 +-
net/batman-adv/multicast.c | 2 +-
net/batman-adv/originator.c | 2 +-
net/batman-adv/send.c | 2 +-
net/batman-adv/tp_meter.c | 2 +-
net/batman-adv/translation-table.c | 2 +-
11 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index b8b1b997..6538d54d 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -225,7 +225,7 @@ static void batadv_iv_ogm_iface_disable(struct batadv_hard_iface *hard_iface)
mutex_unlock(&hard_iface->bat_iv.ogm_buff_mutex);
- cancel_delayed_work_sync(&hard_iface->bat_iv.reschedule_work);
+ disable_delayed_work_sync(&hard_iface->bat_iv.reschedule_work);
}
static void batadv_iv_ogm_iface_update_mac(struct batadv_hard_iface *hard_iface)
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
index de944471..c19fa26c 100644
--- a/net/batman-adv/bat_v.c
+++ b/net/batman-adv/bat_v.c
@@ -819,6 +819,8 @@ void batadv_v_hardif_init(struct batadv_hard_iface *hard_iface)
skb_queue_head_init(&hard_iface->bat_v.aggr_list);
INIT_DELAYED_WORK(&hard_iface->bat_v.aggr_wq,
batadv_v_ogm_aggr_work);
+ /* make sure it doesn't run until interface gets enabled */
+ disable_delayed_work(&hard_iface->bat_v.aggr_wq);
}
/**
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c
index fdc2abe9..d43f555f 100644
--- a/net/batman-adv/bat_v_elp.c
+++ b/net/batman-adv/bat_v_elp.c
@@ -112,7 +112,7 @@ static bool batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh,
goto default_throughput;
/* only use rtnl_trylock because the elp worker will be cancelled while
- * the rntl_lock is held. the cancel_delayed_work_sync() would otherwise
+ * the rntl_lock is held. the disable_delayed_work_sync() would otherwise
* wait forever when the elp work_item was started and it is then also
* trying to rtnl_lock
*/
@@ -159,7 +159,7 @@ static bool batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh,
}
/* only use rtnl_trylock because the elp worker will be cancelled while
- * the rntl_lock is held. the cancel_delayed_work_sync() would otherwise
+ * the rntl_lock is held. the disable_delayed_work_sync() would otherwise
* wait forever when the elp work_item was started and it is then also
* trying to rtnl_lock
*/
@@ -444,7 +444,7 @@ int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface)
*/
void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
{
- cancel_delayed_work_sync(&hard_iface->bat_v.elp_wq);
+ disable_delayed_work_sync(&hard_iface->bat_v.elp_wq);
dev_kfree_skb(hard_iface->bat_v.elp_skb);
hard_iface->bat_v.elp_skb = NULL;
diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c
index d66ca77b..645e4b8a 100644
--- a/net/batman-adv/bat_v_ogm.c
+++ b/net/batman-adv/bat_v_ogm.c
@@ -417,6 +417,8 @@ int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface)
{
struct batadv_priv *bat_priv = netdev_priv(hard_iface->mesh_iface);
+ enable_delayed_work(&hard_iface->bat_v.aggr_wq);
+
batadv_v_ogm_start_queue_timer(hard_iface);
batadv_v_ogm_start_timer(bat_priv);
@@ -429,7 +431,7 @@ int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface)
*/
void batadv_v_ogm_iface_disable(struct batadv_hard_iface *hard_iface)
{
- cancel_delayed_work_sync(&hard_iface->bat_v.aggr_wq);
+ disable_delayed_work_sync(&hard_iface->bat_v.aggr_wq);
spin_lock_bh(&hard_iface->bat_v.aggr_list.lock);
batadv_v_ogm_aggr_list_free(hard_iface);
@@ -1079,7 +1081,7 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv)
*/
void batadv_v_ogm_free(struct batadv_priv *bat_priv)
{
- cancel_delayed_work_sync(&bat_priv->bat_v.ogm_wq);
+ disable_delayed_work_sync(&bat_priv->bat_v.ogm_wq);
mutex_lock(&bat_priv->bat_v.ogm_buff_mutex);
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
index ffe85401..828f6cae 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -1281,7 +1281,7 @@ static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now)
if (purged) {
/* reference for pending report_work */
- if (cancel_work_sync(&backbone_gw->report_work))
+ if (disable_work_sync(&backbone_gw->report_work))
batadv_backbone_gw_put(backbone_gw);
/* reference for hash_entry */
@@ -1849,7 +1849,7 @@ void batadv_bla_free(struct batadv_priv *bat_priv)
{
struct batadv_hard_iface *primary_if;
- cancel_delayed_work_sync(&bat_priv->bla.work);
+ disable_delayed_work_sync(&bat_priv->bla.work);
primary_if = batadv_primary_if_get_selected(bat_priv);
if (bat_priv->bla.claim_hash) {
diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
index 0a8bd95e..9dce7da4 100644
--- a/net/batman-adv/distributed-arp-table.c
+++ b/net/batman-adv/distributed-arp-table.c
@@ -837,7 +837,7 @@ void batadv_dat_free(struct batadv_priv *bat_priv)
batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1);
batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_DAT, 1);
- cancel_delayed_work_sync(&bat_priv->dat.work);
+ disable_delayed_work_sync(&bat_priv->dat.work);
batadv_dat_hash_free(bat_priv);
}
diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c
index 7dba0c2b..b7a72c23 100644
--- a/net/batman-adv/multicast.c
+++ b/net/batman-adv/multicast.c
@@ -2168,7 +2168,7 @@ int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb)
*/
void batadv_mcast_free(struct batadv_priv *bat_priv)
{
- cancel_delayed_work_sync(&bat_priv->mcast.work);
+ disable_delayed_work_sync(&bat_priv->mcast.work);
batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_MCAST, 2);
batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_MCAST_TRACKER, 1);
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index ad4921b6..d6fa3f22 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -906,7 +906,7 @@ void batadv_originator_free(struct batadv_priv *bat_priv)
if (!hash)
return;
- cancel_delayed_work_sync(&bat_priv->orig_work);
+ disable_delayed_work_sync(&bat_priv->orig_work);
bat_priv->orig_hash = NULL;
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 60cd67ec..dbccfc99 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -629,7 +629,7 @@ static void batadv_forw_packet_list_free(struct hlist_head *head)
hlist_for_each_entry_safe(forw_packet, safe_tmp_node, head,
cleanup_list) {
- cancel_delayed_work_sync(&forw_packet->delayed_work);
+ disable_delayed_work_sync(&forw_packet->delayed_work);
hlist_del(&forw_packet->cleanup_list);
batadv_forw_packet_free(forw_packet, true);
diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c
index 0fc4ca78..aaf24db1 100644
--- a/net/batman-adv/tp_meter.c
+++ b/net/batman-adv/tp_meter.c
@@ -425,7 +425,7 @@ static void batadv_tp_list_detach(struct batadv_tp_vars *tp_vars)
*/
static void batadv_tp_sender_cleanup(struct batadv_tp_vars *tp_vars)
{
- cancel_delayed_work_sync(&tp_vars->finish_work);
+ disable_delayed_work_sync(&tp_vars->finish_work);
batadv_tp_list_detach(tp_vars);
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index d72adda4..30873021 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -3606,7 +3606,7 @@ void batadv_tt_free(struct batadv_priv *bat_priv)
batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_TT, 1);
batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_TT, 1);
- cancel_delayed_work_sync(&bat_priv->tt.work);
+ disable_delayed_work_sync(&bat_priv->tt.work);
batadv_tt_local_table_free(bat_priv);
batadv_tt_global_table_free(bat_priv);
---
base-commit: ec9f686b42917e9b67725d7245b50de72f59fa9e
change-id: 20260526-cancel-to-disable-113a0180ad69
Best regards,
--
Sven Eckelmann <[email protected]>