[BUG] fallocate behavior when crossing end-of-file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



		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

[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux