Re: forcing write-back from FS - again

Andrew Morton
2007-10-22T09:55:29Z

On Mon, 22 Oct 2007 12:38:48 +0300 Artem Bityutskiy <dedekind@yandex.ru> wrote:

> Andrew Morton wrote:
> >> diff --git a/include/linux/writeback.h b/include/linux/writeback.h
> >> @@ -28,6 +28,7 @@ static inline int task_is_pdflush(struct task_struct *task)
> >> */
> >> enum writeback_sync_modes {
> >> WB_SYNC_NONE, /* Don't wait on anything */
> >> + WB_SYNC_NONE_PG,/* Don't wait on anything, don't touch locked pages */
> >> WB_SYNC_ALL, /* Wait on every mapping */
> >> WB_SYNC_HOLD, /* Hold the inode on sb_dirty for sys_sync() */
> >> };
> >
> > It would be simpler/safer/saner to add a new bitflag to writeback_control
> > and use that directly. The WB_SYNC_foo flags are a holdover from an
> > earlier time and really should be made to go away, in favour of directly
> > setting up an appropriate writeback_control.
>
> You mean something like (wbc->flags & WB_SYNC_NONE) etc? But below you used
> wbc->skip_locked_pages, I'm confused.

take a look at struct writeback_control:

unsigned nonblocking:1; /* Don't get stuck on request queues */
unsigned encountered_congestion:1; /* An output: a queue is full */
unsigned for_kupdate:1; /* A kupdate writeback */
unsigned for_reclaim:1; /* Invoked from the page allocator */
unsigned for_writepages:1; /* This is a writepages() call */
unsigned range_cyclic:1; /* range_start is cyclic */
unsigned more_io:1; /* more io to be dispatched */

Add another one...