Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05ec9e26 authored by Dave Kleikamp's avatar Dave Kleikamp
Browse files

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: default avatarDave Kleikamp <shaggy@austin.ibm.com>
parent 3cbb1c8e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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);
		}