We hit BUG_ON in ext4_ext_put_gap_in_cache() while creating a file whose size is the max file size of extent format. Because the extent cache length is 0 when we allocate two blocks to the file offset 2^32-2, and then the offset 2^32-1. To fix it, we decrease the max file size to (2^32-2)*blocksize. In this way, we would be able to allocate a block up to the offset 2^32-2. I think there is no data loss because we can read all files created before applying this patch. How to reproduce: I'm running 2.6.39-rc6. Note that i386 architecture and 4KB blocksize cannot reproduce this problem. # dd if=/dev/zero of=/mnt/mp1/file bs=<blocksize> count=1 seek=$((2**32-2)) # sync # dd if=/dev/zero of=/mnt/mp1/file bs=<blocksize> count=1 seek=$((2**32-1)) Signed-off-by: Kazuya Mio <k-mio@xxxxxxxxxxxxx> --- fs/ext4/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 8553dfb..fce0249 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -2248,8 +2248,8 @@ static loff_t ext4_max_size(int blkbits, int has_huge_files) /* 32-bit extent-start container, ee_block */ res = 1LL << 32; - res <<= blkbits; res -= 1; + res <<= blkbits; /* Sanity check against vm- & vfs- imposed limits */ if (res > upper_limit) -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html