]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] truncate: clear page dirtiness before running try_to_free_buffers()
authorAndrew Morton <akpm@osdl.org>
Thu, 21 Dec 2006 19:00:33 +0000 (11:00 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Thu, 21 Dec 2006 19:17:26 +0000 (11:17 -0800)
commit78ef3dfc9002f76e566eb9d5663d66967b327771
treee8bd583fc8fe6e9e2e8533319a30577c0081f70e
parente495b4430640aab72d2c6fe4b5eac8a2c7078208
[PATCH] truncate: clear page dirtiness before running try_to_free_buffers()

truncate presently invalidates the dirty page's buffer_heads then shoots down
the page.  But try_to_free_buffers() will now bale out because the page is
dirty.

Net effect: the LRU gets filled with dirty pages which have invalidated
buffer_heads attached.  They have no ->mapping and hence cannot be cleaned.
The machine leaks memory at an enormous rate.

Fix this by cleaning the page before running try_to_free_buffers(), so
try_to_free_buffers() can do its work.

Also, remember to do dirty-page-acoounting in cancel_dirty_page() so the
machine won't wedge up trying to write non-existent dirty pages.

Probably still wrong, but now less so.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/truncate.c