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

Commit ecd58403 authored by Artem Bityutskiy's avatar Artem Bityutskiy Committed by Jens Axboe
Browse files

writeback: move last_active to bdi



Currently bdi threads use local variable 'last_active' which stores last time
when the bdi thread did some useful work. Move this local variable to 'struct
bdi_writeback'. This is just a preparation for the further patches which will
make the forker thread decide when bdi threads should be killed.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent 78c40cb6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -800,12 +800,12 @@ int bdi_writeback_thread(void *data)
{
	struct bdi_writeback *wb = data;
	struct backing_dev_info *bdi = wb->bdi;
	unsigned long last_active = jiffies;
	unsigned long wait_jiffies = -1UL;
	long pages_written;

	current->flags |= PF_FLUSHER | PF_SWAPWRITE;
	set_freezable();
	wb->last_active = jiffies;

	/*
	 * Our parent may run at a different priority, just set us to normal
@@ -827,7 +827,7 @@ int bdi_writeback_thread(void *data)
		trace_writeback_pages_written(pages_written);

		if (pages_written)
			last_active = jiffies;
			wb->last_active = jiffies;
		else if (wait_jiffies != -1UL) {
			unsigned long max_idle;

@@ -837,7 +837,7 @@ int bdi_writeback_thread(void *data)
			 * recreated automatically.
			 */
			max_idle = max(5UL * 60 * HZ, wait_jiffies);
			if (time_after(jiffies, max_idle + last_active))
			if (time_after(jiffies, max_idle + wb->last_active))
				break;
		}

+7 −6
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ struct bdi_writeback {
	unsigned int nr;

	unsigned long last_old_flush;	/* last old data flush */
	unsigned long last_active;	/* last time bdi thread was active */

	struct task_struct *task;	/* writeback thread */
	struct list_head b_dirty;	/* dirty inodes */