[PATCH] IPMI: Clean up the waiting message queue properly on unload

A wrong function was being used to free a list; this fixes the problem.
Otherwise, an oops at unload time was possible. But not likely, since you
can't have any users when you unload the modules and it is very hard to get
messages into this queue without users.

Signed-off-by: Corey Minyard <minyard@acm.org>
Cc: Patrick Schoeller <Patrick.Schoeller@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Corey Minyard and committed by Linus Torvalds f3ce6a0e 13bb7e37

+11 -1
+11 -1
drivers/char/ipmi/ipmi_msghandler.c
··· 376 } 377 } 378 379 static void clean_up_interface_data(ipmi_smi_t intf) 380 { 381 int i; 382 struct cmd_rcvr *rcvr, *rcvr2; 383 struct list_head list; 384 385 - free_recv_msg_list(&intf->waiting_msgs); 386 free_recv_msg_list(&intf->waiting_events); 387 388 /* Wholesale remove all the entries from the list in the
··· 376 } 377 } 378 379 + static void free_smi_msg_list(struct list_head *q) 380 + { 381 + struct ipmi_smi_msg *msg, *msg2; 382 + 383 + list_for_each_entry_safe(msg, msg2, q, link) { 384 + list_del(&msg->link); 385 + ipmi_free_smi_msg(msg); 386 + } 387 + } 388 + 389 static void clean_up_interface_data(ipmi_smi_t intf) 390 { 391 int i; 392 struct cmd_rcvr *rcvr, *rcvr2; 393 struct list_head list; 394 395 + free_smi_msg_list(&intf->waiting_msgs); 396 free_recv_msg_list(&intf->waiting_events); 397 398 /* Wholesale remove all the entries from the list in the