pktgen: fix module unload for good
commit c57b546840
(pktgen: fix crash at module unload) did a very poor
job with list primitives.
1) list_splice() arguments were in the wrong order
2) list_splice(list, head) has undefined behavior if head is not
initialized.
3) We should use the list_splice_init() variant to clear pktgen_threads
list.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
42ea7d7f2a
commit
d4b1133558
@@ -3755,13 +3755,13 @@ static void __exit pg_cleanup(void)
|
|||||||
{
|
{
|
||||||
struct pktgen_thread *t;
|
struct pktgen_thread *t;
|
||||||
struct list_head *q, *n;
|
struct list_head *q, *n;
|
||||||
struct list_head list;
|
LIST_HEAD(list);
|
||||||
|
|
||||||
/* Stop all interfaces & threads */
|
/* Stop all interfaces & threads */
|
||||||
pktgen_exiting = true;
|
pktgen_exiting = true;
|
||||||
|
|
||||||
mutex_lock(&pktgen_thread_lock);
|
mutex_lock(&pktgen_thread_lock);
|
||||||
list_splice(&list, &pktgen_threads);
|
list_splice_init(&pktgen_threads, &list);
|
||||||
mutex_unlock(&pktgen_thread_lock);
|
mutex_unlock(&pktgen_thread_lock);
|
||||||
|
|
||||||
list_for_each_safe(q, n, &list) {
|
list_for_each_safe(q, n, &list) {
|
||||||
|
Reference in New Issue
Block a user