Loading fs/bcachefs/journal.c +3 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,9 @@ static int journal_entry_open(struct journal *j) if (u64s <= 0) return cur_entry_journal_full; if (fifo_empty(&j->pin) && j->reclaim_thread) wake_up_process(j->reclaim_thread); /* * The fifo_push() needs to happen at the same time as j->seq is * incremented for journal_last_seq() to be calculated correctly Loading fs/bcachefs/journal_reclaim.c +11 −3 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ static int bch2_journal_reclaim_thread(void *arg) struct journal *j = arg; struct bch_fs *c = container_of(j, struct bch_fs, journal); unsigned long delay, now; bool journal_empty; int ret = 0; set_freezable(); Loading @@ -693,10 +694,17 @@ static int bch2_journal_reclaim_thread(void *arg) break; if (j->reclaim_kicked) break; if (time_after_eq(jiffies, j->next_reclaim)) break; schedule_timeout(j->next_reclaim - jiffies); spin_lock(&j->lock); journal_empty = fifo_empty(&j->pin); spin_unlock(&j->lock); if (journal_empty) schedule(); else if (time_after(j->next_reclaim, jiffies)) schedule_timeout(j->next_reclaim - jiffies); else break; } __set_current_state(TASK_RUNNING); } Loading fs/bcachefs/journal_types.h +4 −0 Original line number Diff line number Diff line Loading @@ -243,6 +243,10 @@ struct journal { spinlock_t err_lock; struct mutex reclaim_lock; /* * Used for waiting until journal reclaim has freed up space in the * journal: */ wait_queue_head_t reclaim_wait; struct task_struct *reclaim_thread; bool reclaim_kicked; Loading Loading
fs/bcachefs/journal.c +3 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,9 @@ static int journal_entry_open(struct journal *j) if (u64s <= 0) return cur_entry_journal_full; if (fifo_empty(&j->pin) && j->reclaim_thread) wake_up_process(j->reclaim_thread); /* * The fifo_push() needs to happen at the same time as j->seq is * incremented for journal_last_seq() to be calculated correctly Loading
fs/bcachefs/journal_reclaim.c +11 −3 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ static int bch2_journal_reclaim_thread(void *arg) struct journal *j = arg; struct bch_fs *c = container_of(j, struct bch_fs, journal); unsigned long delay, now; bool journal_empty; int ret = 0; set_freezable(); Loading @@ -693,10 +694,17 @@ static int bch2_journal_reclaim_thread(void *arg) break; if (j->reclaim_kicked) break; if (time_after_eq(jiffies, j->next_reclaim)) break; schedule_timeout(j->next_reclaim - jiffies); spin_lock(&j->lock); journal_empty = fifo_empty(&j->pin); spin_unlock(&j->lock); if (journal_empty) schedule(); else if (time_after(j->next_reclaim, jiffies)) schedule_timeout(j->next_reclaim - jiffies); else break; } __set_current_state(TASK_RUNNING); } Loading
fs/bcachefs/journal_types.h +4 −0 Original line number Diff line number Diff line Loading @@ -243,6 +243,10 @@ struct journal { spinlock_t err_lock; struct mutex reclaim_lock; /* * Used for waiting until journal reclaim has freed up space in the * journal: */ wait_queue_head_t reclaim_wait; struct task_struct *reclaim_thread; bool reclaim_kicked; Loading