On 2012年07月19日 23:42, Andreas Dilger wrote: > > On 2012-07-19, at 7:51 AM, Wang Sheng-Hui wrote: >> I have one question about ext4_fallocate: >> For its parameters, offset & len, it will preallocate >> one space with length >= len, right? >> >> From the code: >> map.m_lblk = offset >> blkbits; >> /* >> * We can't just convert len to max_blocks because >> * If blocksize = 4096 offset = 3072 and len = 2048 >> */ >> max_blocks = (EXT4_BLOCK_ALIGN(len + offset, blkbits) >> blkbits) >> - map.m_lblk; >> >> We can see that the target space is enlarged to the (floor, ceiling) of >> (offset, offset+len). Right? >> >> If I'm wrong, please correct me. > > A whole block has to be allocated for fallocate, but if KEEP_SIZE is not used, the i_size should be changed to match the actual requested size. > Got it. >From the code: /* Return error if mode is not supported */ if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) return -EOPNOTSUPP; if (mode & FALLOC_FL_PUNCH_HOLE) return ext4_punch_hole(file, offset, len); ext4 only supports FALLOC_FL_KEEP_SIZE & FALLOC_FL_PUNCH_HOLE currently. For FALLOC_FL_PUNCH_HOLE, it will turn to ext4_punch_hole, so the rest path deals with only FALLOC_FL_KEEP_SIZE and thus it will use whole blocks. Thanks, Andreas. > Cheers, Andreas > > > > > -- 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