diff --git a/sound/core/info.c b/sound/core/info.c
index c8a413d6cc9b..566279374683 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -738,13 +738,12 @@ EXPORT_SYMBOL(snd_info_create_card_entry);
 
 static void snd_info_disconnect(struct snd_info_entry *entry)
 {
-	struct snd_info_entry *p, *n;
+	struct snd_info_entry *p;
 
 	if (!entry->p)
 		return;
-	list_for_each_entry_safe(p, n, &entry->children, list)
+	list_for_each_entry(p, &entry->children, list)
 		snd_info_disconnect(p);
-	list_del_init(&entry->list);
 	proc_remove(entry->p);
 	entry->p = NULL;
 }
@@ -771,6 +770,7 @@ void snd_info_free_entry(struct snd_info_entry * entry)
 	list_for_each_entry_safe(p, n, &entry->children, list)
 		snd_info_free_entry(p);
 
+	list_del(&entry->list);
 	kfree(entry->name);
 	if (entry->private_free)
 		entry->private_free(entry);