From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Xin Zhao" Subject: a question regarding Ext3 file truncate Date: Wed, 7 Feb 2007 12:16:36 -0500 Message-ID: <4ae3c140702070916s71055311j107577421c2c366a@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit To: linux-fsdevel Return-path: Received: from wr-out-0506.google.com ([64.233.184.225]:45254 "EHLO wr-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161388AbXBGRQj (ORCPT ); Wed, 7 Feb 2007 12:16:39 -0500 Received: by wr-out-0506.google.com with SMTP id i21so269375wra for ; Wed, 07 Feb 2007 09:16:37 -0800 (PST) Content-Disposition: inline Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org 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]); Right? can some one explain this a little bit? Thanks, -x