batman-adv: fix hardif_neigh refcount on queue_work() failure
The hardif_neigh refcounter is to be decreased by the queued work and currently is never decreased if the queue_work() call fails. Fix by checking the queue_work() return value and decrease refcount if necessary. Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
This commit is contained in:
Родитель
5af96b9c59
Коммит
4c4af69008
|
@ -268,6 +268,7 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
|
|||
struct batadv_priv *bat_priv;
|
||||
struct sk_buff *skb;
|
||||
u32 elp_interval;
|
||||
bool ret;
|
||||
|
||||
bat_v = container_of(work, struct batadv_hard_iface_bat_v, elp_wq.work);
|
||||
hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v);
|
||||
|
@ -329,8 +330,11 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
|
|||
* may sleep and that is not allowed in an rcu protected
|
||||
* context. Therefore schedule a task for that.
|
||||
*/
|
||||
queue_work(batadv_event_workqueue,
|
||||
&hardif_neigh->bat_v.metric_work);
|
||||
ret = queue_work(batadv_event_workqueue,
|
||||
&hardif_neigh->bat_v.metric_work);
|
||||
|
||||
if (!ret)
|
||||
batadv_hardif_neigh_put(hardif_neigh);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче