GIT: unionfs2-2.6.27.y: ipmi: handle run_to_completion properly in deliver_recv_msg()

Erez Zadok ezk at fsl.cs.sunysb.edu
Thu Aug 12 23:15:29 EDT 2010


commit 310c0ab725ad1950bb1592306d583a60e9f000fb
Author: Jiri Kosina <jkosina at suse.cz>
Date:   Wed May 26 14:43:53 2010 -0700

    ipmi: handle run_to_completion properly in deliver_recv_msg()
    
    commit a747c5abc329611220f16df0bb4cf0ca4a7fdf0c upstream.
    
    If run_to_completion flag is set, it means that we are running in a
    single-threaded mode, and thus no locks are held.
    
    This fixes a deadlock when IPMI notifier is being called during panic.
    
    Signed-off-by: Jiri Kosina <jkosina at suse.cz>
    Acked-by: Corey Minyard <minyard at acm.org>
    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>

diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index 7e860da..604c991 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -313,9 +313,14 @@ static void deliver_recv_msg(struct smi_info *smi_info,
 {
 	/* Deliver the message to the upper layer with the lock
 	   released. */
-	spin_unlock(&(smi_info->si_lock));
-	ipmi_smi_msg_received(smi_info->intf, msg);
-	spin_lock(&(smi_info->si_lock));
+
+	if (smi_info->run_to_completion) {
+		ipmi_smi_msg_received(smi_info->intf, msg);
+	} else {
+		spin_unlock(&(smi_info->si_lock));
+		ipmi_smi_msg_received(smi_info->intf, msg);
+		spin_lock(&(smi_info->si_lock));
+	}
 }
 
 static void return_hosed_msg(struct smi_info *smi_info, int cCode)


More information about the unionfs-cvs mailing list