Gentle ping 2017-10-24 1:29 GMT+03:00 Timofey Titovets <nefelim...@gmail.com>: > We need to call extent_range_clear_dirty_for_io() > on compression range to prevent application from changing > page content, while pages compressing. > > extent_range_clear_dirty_for_io() run on each loop iteration, > "(end - start)" can be much (up to 1024 times) bigger > then compression range (BTRFS_MAX_UNCOMPRESSED). > > That produce extra calls to page managment code. > > Fix that behaviour by call extent_range_clear_dirty_for_io() > only once. > > v1 -> v2: > - Make that more obviously and more safeprone > > v2 -> v3: > - Rebased on: > Btrfs: compress_file_range() remove dead variable num_bytes > - Update change log > - Add comments > > v3 -> v4: > - Rebased on: kdave for-next > - To avoid dirty bit clear/set behaviour change > call clear_bit once, istead of per compression range > > Signed-off-by: Timofey Titovets <nefelim...@gmail.com> > --- > fs/btrfs/inode.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c > index b93fe05a39c7..5816dd3cb6e6 100644 > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -536,8 +536,10 @@ static noinline void compress_file_range(struct inode > *inode, > * If the compression fails for any reason, we set the pages > * dirty again later on. > */ > - extent_range_clear_dirty_for_io(inode, start, end); > - redirty = 1; > + if (!redirty) { > + extent_range_clear_dirty_for_io(inode, start, end); > + redirty = 1; > + } > > /* Compression level is applied here and only here */ > ret = btrfs_compress_pages( > -- > 2.14.2
-- Have a nice day, Timofey. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html