diff options
| author | Miklos Szeredi <miklos@szeredi.hu> | 2004-07-16 04:44:49 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-07-16 04:44:49 -0700 |
| commit | f044bba32770c258f7baacde36dd0e1fa84b7120 (patch) | |
| tree | e27d9a69226373a2f2976e989b5047e2c3ba2eb3 /include | |
| parent | 5cea9705bcc0fb3592e9a856d22aa57841264765 (diff) | |
[PATCH] fix inode state incoherency
This patch fixes a hard-to-trigger condition, where the inode is on the
inode_in_use list while it's state is dirty. In this state dirty pages are
not written back in sync() or from kupdate, only from direct page reclaim.
And this causes a livelock in balance_dirty_pages after a while.
The actual sequence of events required to get into this state is:
thread function inode state inode list
----------------------------------------------------------------------------
1 __sync_single_inode (background) I_DIRTY sb->s_io
1 do_writepages ... I_LOCKED
2 __writeback_single_inode (sync) sleeps I_LOCKED
1 __sync_single_inode (background) finish 0 inode_in_use
2 __writeback_single_inode (sync) wakeup 0
2 __sync_single_inode (sync) 0
2 do_writepages ... I_LOCKED
3 __mark_inode_dirty I_LOCKED | I_DIRTY
2 __sync_single_inode (sync) finish I_DIRTY left on
inode_in_use
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions
