Thanks a lot! I just found it. If we need to truncate a file to 0 bytes, we have to change i_size to 0 first, then call ext3_truncate(). Then the code makes sense. Xin On 2/7/07, Mingming Cao <cmm@xxxxxxxxxx> wrote:
On Wed, 2007-02-07 at 12:16 -0500, Xin Zhao wrote: > Hi, > > Please forgive me if the question is dumb. > > I am modifying ext3 to add some new features, but was confused by the > implementation of ext3_truncate(). > > In ext3_truncate(): > > we first use > n = ext3_block_to_path(inode, last_block, offsets, NULL); > to get the path of the last block. > > If the number of blocks is smaller than 12, all blocks are then > direct blocks. We then need to clear them. > > But the interesting thing happens: > if (n == 1) /* direct blocks */ > { > ext3_free_data(handle, inode, NULL, i_data+offsets[0], > i_data + EXT3_NDIR_BLOCKS); > goto do_indirects; > } > This code seems to free data blocks right after the blocks used by the > file. I think it should be > ext3_free_data(handle, inode, NULL, i_data, i_data+offsets[0]); Last_block is the last logical block after the truncate, so ext3_truncate() free data blocks after this point. Mingming
- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html