diff options
author | Fengguang Wu <wfg@mail.ustc.edu.cn> | 2007-10-16 23:30:39 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 08:43:02 -0700 |
commit | 2c1365791048e8aff42138ed5f6040b3c7824a69 (patch) | |
tree | 3c8de64f6b4995125f3f6171fdf175232a412783 /fs/adfs | |
parent | 0e0f4fc22ece8e593167eccbb1a4154565c11faa (diff) | |
download | kernel-crypto-2c1365791048e8aff42138ed5f6040b3c7824a69.tar.gz kernel-crypto-2c1365791048e8aff42138ed5f6040b3c7824a69.tar.xz kernel-crypto-2c1365791048e8aff42138ed5f6040b3c7824a69.zip |
writeback: fix time ordering of the per superblock inode lists 8
Streamline the management of dirty inode lists and fix time ordering bugs.
The writeback logic used to move not-yet-expired dirty inodes from s_dirty to
s_io, *only to* move them back. The move-inodes-back-and-forth thing is a
mess, which is eliminated by this patch.
The new scheme is:
- s_dirty acts as a time ordered io delaying queue;
- s_io/s_more_io together acts as an io dispatching queue.
On kupdate writeback, we pull some inodes from s_dirty to s_io at the start of
every full scan of s_io. Otherwise (i.e. for sync/throttle/background
writeback), we always pull from s_dirty on each run (a partial scan).
Note that the line
list_splice_init(&sb->s_more_io, &sb->s_io);
is moved to queue_io() to leave s_io empty. Otherwise a big dirtied file will
sit in s_io for a long time, preventing new expired inodes to get in.
Cc: Ken Chen <kenchen@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/adfs')
0 files changed, 0 insertions, 0 deletions