--- linux-2.6.16-rc4/fs/ext3/inode.c 2006-02-18 14:40:22 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext3/inode.c 2006-02-17 23:26:32 +0100 @@ -180,6 +181,8 @@ static int ext3_journal_test_restart(han return ext3_journal_restart(handle, blocks_for_truncate(inode)); } +static void ext3_truncate_nocheck (struct inode *inode); + /* * Called at the last iput() if i_nlink is zero. */ --- linux-2.6.16-rc4/fs/ext3/inode.c 2006-02-18 14:40:22 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext3/inode.c 2006-02-17 23:26:32 +0100 @@ -205,7 +208,7 @@ void ext3_delete_inode (struct inode * i handle->h_sync = 1; inode->i_size = 0; if (inode->i_blocks) - ext3_truncate(inode); + ext3_truncate_nocheck(inode); /* * Kill off the orphan record which ext3_truncate created. * AKPM: I think this can be inside the above `if'. --- linux-2.6.16-rc4/fs/ext3/inode.c 2006-02-18 14:40:22 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext3/inode.c 2006-02-17 23:26:32 +0100 @@ -2078,7 +2081,7 @@ static void ext3_free_branches(handle_t * ext3_truncate() run will find them and release them. */ -void ext3_truncate(struct inode * inode) +void ext3_truncate_nocheck(struct inode * inode) { handle_t *handle; struct ext3_inode_info *ei = EXT3_I(inode); --- linux-2.6.16-rc4/fs/ext3/inode.c 2006-02-18 14:40:22 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext3/inode.c 2006-02-17 23:26:32 +0100 @@ -2419,6 +2420,13 @@ int ext3_get_inode_loc(struct inode *ino !(EXT3_I(inode)->i_state & EXT3_STATE_XATTR)); } +void ext3_truncate(struct inode * inode) +{ + if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) + return; + ext3_truncate_nocheck(inode); +} + void ext3_set_inode_flags(struct inode *inode) { unsigned int flags = EXT3_I(inode)->i_flags; --- linux-2.6.16-rc4/fs/ext2/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext2/inode.c 2006-02-17 23:26:32 +0100 @@ -66,6 +67,8 @@ void ext2_put_inode(struct inode *inode) ext2_discard_prealloc(inode); } +static void ext2_truncate_nocheck (struct inode * inode); + /* * Called at the last iput() if i_nlink is zero. */ --- linux-2.6.16-rc4/fs/ext2/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext2/inode.c 2006-02-17 23:26:32 +0100 @@ -81,7 +84,7 @@ void ext2_delete_inode (struct inode * i inode->i_size = 0; if (inode->i_blocks) - ext2_truncate (inode); + ext2_truncate_nocheck(inode); ext2_free_inode (inode); return; --- linux-2.6.16-rc4/fs/ext2/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext2/inode.c 2006-02-17 23:26:32 +0100 @@ -908,7 +911,7 @@ static void ext2_free_branches(struct in ext2_free_data(inode, p, q); } -void ext2_truncate (struct inode * inode) +static void ext2_truncate_nocheck(struct inode * inode) { __le32 *i_data = EXT2_I(inode)->i_data; int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb); --- linux-2.6.16-rc4/fs/ext2/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext2/inode.c 2006-02-17 23:26:32 +0100 @@ -1050,6 +1051,13 @@ Egdp: return ERR_PTR(-EIO); } +void ext2_truncate (struct inode * inode) +{ + if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) + return; + ext2_truncate_nocheck(inode); +} + void ext2_set_inode_flags(struct inode *inode) { unsigned int flags = EXT2_I(inode)->i_flags; --- linux-2.6.16-rc4/fs/ext2/inode.c 2006-02-18 14:40:21 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext2/inode.c 2006-02-17 23:26:32 +0100 @@ -925,8 +928,6 @@ void ext2_truncate (struct inode * inode return; if (ext2_inode_is_fast_symlink(inode)) return; - if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) - return; ext2_discard_prealloc(inode); --- linux-2.6.16-rc4/fs/ext3/inode.c 2006-02-18 14:40:22 +0100 +++ linux-2.6.16-rc4-vs2.1.1-rc8/fs/ext3/inode.c 2006-02-17 23:26:32 +0100 @@ -2099,8 +2102,6 @@ void ext3_truncate(struct inode * inode) return; if (ext3_inode_is_fast_symlink(inode)) return; - if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) - return; /* * We have to lock the EOF page here, because lock_page() nests