From: Andrew Morton Signed-off-by: Andrew Morton --- fs/affs/inode.c | 1 - fs/bfs/inode.c | 2 -- fs/ext2/inode.c | 2 -- fs/ext3/inode.c | 2 -- fs/fat/inode.c | 2 -- fs/hostfs/hostfs_kern.c | 1 - fs/hpfs/inode.c | 1 - fs/inode.c | 12 +++++------- fs/jffs/inode-v23.c | 1 - fs/jfs/inode.c | 2 -- fs/minix/inode.c | 1 - fs/ncpfs/inode.c | 2 -- fs/nfs/inode.c | 2 -- fs/proc/inode.c | 2 -- fs/qnx4/inode.c | 1 - fs/reiserfs/inode.c | 2 -- fs/smbfs/inode.c | 1 - fs/sysv/inode.c | 1 - fs/udf/inode.c | 2 -- fs/ufs/inode.c | 1 - mm/shmem.c | 1 - 21 files changed, 5 insertions(+), 37 deletions(-) diff -puN fs/inode.c~ocfs2-prep fs/inode.c --- devel/fs/inode.c~ocfs2-prep 2005-08-19 12:25:48.000000000 -0700 +++ devel-akpm/fs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -1034,21 +1034,19 @@ void generic_delete_inode(struct inode * inodes_stat.nr_inodes--; spin_unlock(&inode_lock); + if (inode->i_data.nrpages) + truncate_inode_pages(&inode->i_data, 0); + security_inode_delete(inode); if (op->delete_inode) { void (*delete)(struct inode *) = op->delete_inode; if (!is_bad_inode(inode)) DQUOT_INIT(inode); - /* Filesystems implementing their own - * s_op->delete_inode are required to call - * truncate_inode_pages and clear_inode() - * internally */ + /* s_op->delete_inode internally recalls clear_inode() */ delete(inode); - } else { - truncate_inode_pages(&inode->i_data, 0); + } else clear_inode(inode); - } spin_lock(&inode_lock); hlist_del_init(&inode->i_hash); spin_unlock(&inode_lock); diff -puN fs/affs/inode.c~ocfs2-prep fs/affs/inode.c --- devel/fs/affs/inode.c~ocfs2-prep 2005-08-19 12:25:48.000000000 -0700 +++ devel-akpm/fs/affs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -255,7 +255,6 @@ void affs_delete_inode(struct inode *inode) { pr_debug("AFFS: delete_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink); - truncate_inode_pages(&inode->i_data, 0); inode->i_size = 0; if (S_ISREG(inode->i_mode)) affs_truncate(inode); diff -puN fs/bfs/inode.c~ocfs2-prep fs/bfs/inode.c --- devel/fs/bfs/inode.c~ocfs2-prep 2005-08-19 12:25:48.000000000 -0700 +++ devel-akpm/fs/bfs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -143,8 +143,6 @@ static void bfs_delete_inode(struct inod dprintf("ino=%08lx\n", inode->i_ino); - truncate_inode_pages(&inode->i_data, 0); - if (inode->i_ino < BFS_ROOT_INO || inode->i_ino > info->si_lasti) { printf("invalid ino=%08lx\n", inode->i_ino); return; diff -puN fs/ext2/inode.c~ocfs2-prep fs/ext2/inode.c --- devel/fs/ext2/inode.c~ocfs2-prep 2005-08-19 12:25:48.000000000 -0700 +++ devel-akpm/fs/ext2/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -71,8 +71,6 @@ void ext2_put_inode(struct inode *inode) */ void ext2_delete_inode (struct inode * inode) { - truncate_inode_pages(&inode->i_data, 0); - if (is_bad_inode(inode)) goto no_delete; EXT2_I(inode)->i_dtime = get_seconds(); diff -puN fs/ext3/inode.c~ocfs2-prep fs/ext3/inode.c --- devel/fs/ext3/inode.c~ocfs2-prep 2005-08-19 12:25:48.000000000 -0700 +++ devel-akpm/fs/ext3/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -187,8 +187,6 @@ void ext3_delete_inode (struct inode * i { handle_t *handle; - truncate_inode_pages(&inode->i_data, 0); - if (is_bad_inode(inode)) goto no_delete; diff -puN fs/fat/inode.c~ocfs2-prep fs/fat/inode.c --- devel/fs/fat/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/fat/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -335,8 +335,6 @@ EXPORT_SYMBOL(fat_build_inode); static void fat_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); - if (!is_bad_inode(inode)) { inode->i_size = 0; fat_truncate(inode); diff -puN fs/hostfs/hostfs_kern.c~ocfs2-prep fs/hostfs/hostfs_kern.c --- devel/fs/hostfs/hostfs_kern.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/hostfs/hostfs_kern.c 2005-08-19 12:26:28.000000000 -0700 @@ -284,7 +284,6 @@ static struct inode *hostfs_alloc_inode( static void hostfs_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); if(HOSTFS_I(inode)->fd != -1) { close_file(&HOSTFS_I(inode)->fd); HOSTFS_I(inode)->fd = -1; diff -puN fs/hpfs/inode.c~ocfs2-prep fs/hpfs/inode.c --- devel/fs/hpfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/hpfs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -284,7 +284,6 @@ void hpfs_write_if_changed(struct inode void hpfs_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); lock_kernel(); hpfs_remove_fnode(inode->i_sb, inode->i_ino); unlock_kernel(); diff -puN fs/jffs/inode-v23.c~ocfs2-prep fs/jffs/inode-v23.c --- devel/fs/jffs/inode-v23.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/jffs/inode-v23.c 2005-08-19 12:26:28.000000000 -0700 @@ -1747,7 +1747,6 @@ jffs_delete_inode(struct inode *inode) D3(printk("jffs_delete_inode(): inode->i_ino == %lu\n", inode->i_ino)); - truncate_inode_pages(&inode->i_data, 0); lock_kernel(); inode->i_size = 0; inode->i_blocks = 0; diff -puN fs/jfs/inode.c~ocfs2-prep fs/jfs/inode.c --- devel/fs/jfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/jfs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -132,8 +132,6 @@ void jfs_delete_inode(struct inode *inod (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I))) return; - truncate_inode_pages(&inode->i_data, 0); - if (test_cflag(COMMIT_Freewmap, inode)) jfs_free_zero_link(inode); diff -puN fs/minix/inode.c~ocfs2-prep fs/minix/inode.c --- devel/fs/minix/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/minix/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -24,7 +24,6 @@ static int minix_remount (struct super_b static void minix_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); inode->i_size = 0; minix_truncate(inode); minix_free_inode(inode); diff -puN fs/ncpfs/inode.c~ocfs2-prep fs/ncpfs/inode.c --- devel/fs/ncpfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/ncpfs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -286,8 +286,6 @@ ncp_iget(struct super_block *sb, struct static void ncp_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); - if (S_ISDIR(inode->i_mode)) { DDPRINTK("ncp_delete_inode: put directory %ld\n", inode->i_ino); } diff -puN fs/nfs/inode.c~ocfs2-prep fs/nfs/inode.c --- devel/fs/nfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/nfs/inode.c 2005-08-19 12:26:28.000000000 -0700 @@ -146,8 +146,6 @@ nfs_delete_inode(struct inode * inode) { dprintk("NFS: delete_inode(%s/%ld)\n", inode->i_sb->s_id, inode->i_ino); - truncate_inode_pages(&inode->i_data, 0); - nfs_wb_all(inode); /* * The following should never happen... diff -puN fs/proc/inode.c~ocfs2-prep fs/proc/inode.c --- devel/fs/proc/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/proc/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -60,8 +60,6 @@ static void proc_delete_inode(struct ino struct proc_dir_entry *de; struct task_struct *tsk; - truncate_inode_pages(&inode->i_data, 0); - /* Let go of any associated process */ tsk = PROC_I(inode)->task; if (tsk) diff -puN fs/qnx4/inode.c~ocfs2-prep fs/qnx4/inode.c --- devel/fs/qnx4/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/qnx4/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -63,7 +63,6 @@ int qnx4_sync_inode(struct inode *inode) static void qnx4_delete_inode(struct inode *inode) { QNX4DEBUG(("qnx4: deleting inode [%lu]\n", (unsigned long) inode->i_ino)); - truncate_inode_pages(&inode->i_data, 0); inode->i_size = 0; qnx4_truncate(inode); lock_kernel(); diff -puN fs/reiserfs/inode.c~ocfs2-prep fs/reiserfs/inode.c --- devel/fs/reiserfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/reiserfs/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -33,8 +33,6 @@ void reiserfs_delete_inode(struct inode 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb); struct reiserfs_transaction_handle th; - truncate_inode_pages(&inode->i_data, 0); - reiserfs_write_lock(inode->i_sb); /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ diff -puN fs/smbfs/inode.c~ocfs2-prep fs/smbfs/inode.c --- devel/fs/smbfs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/smbfs/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -331,7 +331,6 @@ static void smb_delete_inode(struct inode *ino) { DEBUG1("ino=%ld\n", ino->i_ino); - truncate_inode_pages(&ino->i_data, 0); lock_kernel(); if (smb_close(ino)) PARANOIA("could not close inode %ld\n", ino->i_ino); diff -puN fs/sysv/inode.c~ocfs2-prep fs/sysv/inode.c --- devel/fs/sysv/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/sysv/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -292,7 +292,6 @@ int sysv_sync_inode(struct inode * inode static void sysv_delete_inode(struct inode *inode) { - truncate_inode_pages(&inode->i_data, 0); inode->i_size = 0; sysv_truncate(inode); lock_kernel(); diff -puN fs/udf/inode.c~ocfs2-prep fs/udf/inode.c --- devel/fs/udf/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/udf/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -87,8 +87,6 @@ static int udf_get_block(struct inode *, */ void udf_delete_inode(struct inode * inode) { - truncate_inode_pages(&inode->i_data, 0); - if (is_bad_inode(inode)) goto no_delete; diff -puN fs/ufs/inode.c~ocfs2-prep fs/ufs/inode.c --- devel/fs/ufs/inode.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/fs/ufs/inode.c 2005-08-19 12:26:29.000000000 -0700 @@ -804,7 +804,6 @@ int ufs_sync_inode (struct inode *inode) void ufs_delete_inode (struct inode * inode) { - truncate_inode_pages(&inode->i_data, 0); /*UFS_I(inode)->i_dtime = CURRENT_TIME;*/ lock_kernel(); mark_inode_dirty(inode); diff -puN mm/shmem.c~ocfs2-prep mm/shmem.c --- devel/mm/shmem.c~ocfs2-prep 2005-08-19 12:25:49.000000000 -0700 +++ devel-akpm/mm/shmem.c 2005-08-19 12:26:29.000000000 -0700 @@ -668,7 +668,6 @@ static void shmem_delete_inode(struct in struct shmem_inode_info *info = SHMEM_I(inode); if (inode->i_op->truncate == shmem_truncate) { - truncate_inode_pages(inode->i_mapping, 0); shmem_unacct_size(info->flags, inode->i_size); inode->i_size = 0; shmem_truncate(inode); _