Commit 718ce1eb authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet
Browse files

bcachefs: Skip periodic wakeup of journal reclaim when journal empty



Less system noise.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent f0cc5d29
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+11 −3
Original line number Diff line number Diff line
@@ -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();
@@ -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);
	}
+4 −0
Original line number Diff line number Diff line
@@ -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;