Re: a question regarding Ext3 file truncate
From: Mingming Cao <hidden>
Date: 2007-02-07 18:37:56
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