net: Move mutex_unlock() in cleanup_net() up
net_sem protects from pernet_list changing, while ops_free_list() makes simple kfree(), and it can't race with other pernet_operations callbacks. So we may release net_mutex earlier then it was. Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Acked-by: Andrei Vagin <avagin@virtuozzo.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1a57feb847
commit
bcab1ddd9b
|
@ -522,11 +522,12 @@ static void cleanup_net(struct work_struct *work)
|
|||
list_for_each_entry_reverse(ops, &pernet_list, list)
|
||||
ops_exit_list(ops, &net_exit_list);
|
||||
|
||||
mutex_unlock(&net_mutex);
|
||||
|
||||
/* Free the net generic variables */
|
||||
list_for_each_entry_reverse(ops, &pernet_list, list)
|
||||
ops_free_list(ops, &net_exit_list);
|
||||
|
||||
mutex_unlock(&net_mutex);
|
||||
up_read(&net_sem);
|
||||
|
||||
/* Ensure there are no outstanding rcu callbacks using this
|
||||
|
|
Loading…
Reference in New Issue