On Sat, Apr 2, 2011 at 1:05 AM, Ding Dinghua <dingdinghua85@xxxxxxxxx> wrote: > When truncate files and free blocks, the following codes make me puzzled: > > void ext4_free_blocks(handle_t *handle, struct inode *inode, > struct buffer_head *bh, ext4_fsblk_t block, > unsigned long count, int flags) > { > if (flags & EXT4_FREE_BLOCKS_FORGET) { > struct buffer_head *tbh = bh; > int i; > > BUG_ON(bh && (count > 1)); > > for (i = 0; i < count; i++) { > if (!bh) > tbh = sb_find_get_block(inode->i_sb, > block + i); > if (unlikely(!tbh)) > continue; > ext4_forget(handle, flags & EXT4_FREE_BLOCKS_METADATA, > inode, tbh, block + i); > } > } > } > > I notice that ext4_forget mainly do two things: > a) call jbd2_journa_forget to forget the modification of some buffer head > b) or deal with the revoke issue > however, if we are freeing data blocks && ext4_forget get into branch a), Simple. we don't pass the FORGET flag when freeing data blocks, only when freeing metadata blocks, which may have been journalled already. I am not sure about the journal=data case through. > tbh is not the buffer_head which journal took care of in ext4_write_begin, > so i'm puzzled with this. > > Could anyone explain it to me? Thanks. > > -- > Ding Dinghua > -- > 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 > -- 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