Hello.
I found the following bug in BtrFS:
1. Create and open an empty file
2. fallocate (fd, 0, 1)
Desired: something (probably, one block) is allocated/reserved for the
file. File length is set to 1 byte.
Actual: A block is allocated. File length is set to 1 block (4096
bytes). The rest of the file is filled with zeros.
last_byte = min(extent_map_end(em), alloc_end);
last_byte = (last_byte + mask) & ~mask;
if (em->block_start == EXTENT_MAP_HOLE) {
ret = prealloc_file_range(trans, inode, cur_offset,
last_byte, locked_end + 1,
alloc_hint, mode);
That part seems strange to me. You make an effort for block size to
divide last_byte. But last_byte should be
max(i_size_read(inode), offset+len)
- without any rounding.
Michael Raskin
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html