Messages in this thread | | | Date | Sun, 5 Oct 2008 15:33:06 -0700 | From | Arjan van de Ven <> | Subject | Re: [PATCH 2/3] Fix fsync livelock |
| |
On Sun, 5 Oct 2008 18:14:50 -0400 (EDT) Mikulas Patocka <mpatocka@redhat.com> wrote:
> Fix starvation in memory management. > > The bug happens when one process is doing sequential buffered writes > to a block device (or file) and another process is attempting to > execute sync(), fsync() or direct-IO on that device (or file). This > syncing process will wait indefinitelly, until the first writing > process finishes. > > For example, run these two commands: > dd if=/dev/zero of=/dev/sda1 bs=65536 & > dd if=/dev/sda1 of=/dev/null bs=4096 count=1 iflag=direct > > The bug is caused by sequential walking of address space in > write_cache_pages and wait_on_page_writeback_range: if some other > process is constantly making dirty and writeback pages while these > functions run, the functions will wait on every new page, resulting in > indefinite wait.
are you sure? isn't the right fix to just walk the file pages only once?
| |