[PATCH] cond_resched_lock() fix
authorJan Kara <jack@suse.cz>
Mon, 13 Jun 2005 22:52:32 +0000 (15:52 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 14 Jun 2005 03:58:58 +0000 (20:58 -0700)
On one path, cond_resched_lock() fails to return true if it dropped the lock.
We think this might be causing the crashes in JBD's log_do_checkpoint().

Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
kernel/sched.c

index 66b2ed784822739b1c2e46c317dca2e3324fc6f1..f12a0c8a7d98d0cbda8507dd9fa8233acb51f087 100644 (file)
@@ -3755,19 +3755,22 @@ EXPORT_SYMBOL(cond_resched);
  */
 int cond_resched_lock(spinlock_t * lock)
 {
+       int ret = 0;
+
        if (need_lockbreak(lock)) {
                spin_unlock(lock);
                cpu_relax();
+               ret = 1;
                spin_lock(lock);
        }
        if (need_resched()) {
                _raw_spin_unlock(lock);
                preempt_enable_no_resched();
                __cond_resched();
+               ret = 1;
                spin_lock(lock);
-               return 1;
        }
-       return 0;
+       return ret;
 }
 
 EXPORT_SYMBOL(cond_resched_lock);