Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=05ec9e26be1f668ccba4ca54d9a4966c6208c611
Commit:     05ec9e26be1f668ccba4ca54d9a4966c6208c611
Parent:     3cbb1c8e1a4787d3dc2951b7615d7bb3788c49a0
Author:     Dave Kleikamp <[EMAIL PROTECTED]>
AuthorDate: Sat May 5 14:24:05 2007 -0500
Committer:  Dave Kleikamp <[EMAIL PROTECTED]>
CommitDate: Sat May 5 14:24:05 2007 -0500

    JFS: Fix race waking up jfsIO kernel thread
    
    It's possible for a journal I/O request to be added to the log_redrive
    queue and the jfsIO thread to be awakened after the thread releases
    log_redrive_lock but before it sets its state to TASK_INTERRUPTIBLE.
    
    The jfsIO thread should set the state before giving up the spinlock, so
    the waking thread will really wake it.
    
    Signed-off-by: Dave Kleikamp <[EMAIL PROTECTED]>
---
 fs/jfs/jfs_logmgr.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index ff7f1be..16c6268 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -2354,12 +2354,13 @@ int jfsIOWait(void *arg)
                        lbmStartIO(bp);
                        spin_lock_irq(&log_redrive_lock);
                }
-               spin_unlock_irq(&log_redrive_lock);
 
                if (freezing(current)) {
+                       spin_unlock_irq(&log_redrive_lock);
                        refrigerator();
                } else {
                        set_current_state(TASK_INTERRUPTIBLE);
+                       spin_unlock_irq(&log_redrive_lock);
                        schedule();
                        __set_current_state(TASK_RUNNING);
                }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to