]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: make mapping->writeback_index point to the last written page
authorLiu Bo <bo.li.liu@oracle.com>
Tue, 8 Mar 2016 00:56:21 +0000 (16:56 -0800)
committerDavid Sterba <dsterba@suse.com>
Thu, 28 Apr 2016 08:41:47 +0000 (10:41 +0200)
commitc8c40b076ba0b111b5da9c7465a0dbf130c566f6
tree5f16ded08debb18f910d87e8fec973f861e5cc72
parentbbc79515538ef155e07d28580cf179eab2986f3b
Btrfs: make mapping->writeback_index point to the last written page

If sequential writer is writing in the middle of the page and it just redirties
the last written page by continuing from it.

In the above case this can end up with seeking back to that firstly redirtied
page after writing all the pages at the end of file because btrfs updates
mapping->writeback_index to 1 past the current one.

For non-cow filesystems, the cost is only about extra seek, while for cow
filesystems such as btrfs, it means unnecessary fragments.

To avoid it, we just need to continue writeback from the last written page.

This also updates btrfs to behave like what write_cache_pages() does, ie, bail
 out immediately if there is an error in writepage().

<Ref: https://www.spinics.net/lists/linux-btrfs/msg52628.html>

Reported-by: Holger Hoffstätte <holger.hoffstaette@googlemail.com>
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c