2011/4/3 Amir Goldstein <amir73il@xxxxxxxxx>: > 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. Thanks for reply. The reason for me to dip into this issue is journal=data mode. > >> 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 >> > -- 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