]> git.baikalelectronics.ru Git - kernel.git/commit
ext4: allocate entire range in zero range
authorLukas Czerner <lczerner@redhat.com>
Fri, 3 Apr 2015 04:09:13 +0000 (00:09 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 3 Apr 2015 04:09:13 +0000 (00:09 -0400)
commit8e749552aeeaa5fcf1be456508037d9ce7593a10
tree753b0c67fecebe1cc2bf15ca775b9ea13312b85c
parent75860111ee40b9708c1ee46227ce2acc404f353b
ext4: allocate entire range in zero range

Currently there is a bug in zero range code which causes zero range
calls to only allocate block aligned portion of the range, while
ignoring the rest in some cases.

In some cases, namely if the end of the range is past i_size, we do
attempt to preallocate the last nonaligned block. However this might
cause kernel to BUG() in some carefully designed zero range requests
on setups where page size > block size.

Fix this problem by first preallocating the entire range, including
the nonaligned edges and converting the written extents to unwritten
in the next step. This approach will also give us the advantage of
having the range to be as linearly contiguous as possible.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c