]> err.no Git - linux-2.6/commitdiff
[PATCH] update filesystems for new delete_inode behavior
authorMark Fasheh <mark.fasheh@oracle.com>
Fri, 9 Sep 2005 20:01:31 +0000 (13:01 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 9 Sep 2005 20:57:27 +0000 (13:57 -0700)
Update the file systems in fs/ implementing a delete_inode() callback to
call truncate_inode_pages().  One implementation note: In developing this
patch I put the calls to truncate_inode_pages() at the very top of those
filesystems delete_inode() callbacks in order to retain the previous
behavior.  I'm guessing that some of those could probably be optimized.

Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Acked-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 files changed:
fs/affs/inode.c
fs/bfs/inode.c
fs/ext2/inode.c
fs/ext3/inode.c
fs/fat/inode.c
fs/hostfs/hostfs_kern.c
fs/hpfs/inode.c
fs/jffs/inode-v23.c
fs/jfs/inode.c
fs/minix/inode.c
fs/ncpfs/inode.c
fs/nfs/inode.c
fs/proc/inode.c
fs/qnx4/inode.c
fs/reiserfs/inode.c
fs/smbfs/inode.c
fs/sysv/inode.c
fs/udf/inode.c
fs/ufs/inode.c
mm/shmem.c

index 7aa6f2004536d36a32555ac43595d9818c2331f0..9ebe881c67864d1ab04c31c0801b74d6b15b0e6d 100644 (file)
@@ -255,6 +255,7 @@ 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);
index 64e0fb33fc0cacda1dec350ca523f9ee91d10e2a..628c2c1a7d7e4a1ee73d5ec2dacbbaab652e5a44 100644 (file)
@@ -143,6 +143,8 @@ static void bfs_delete_inode(struct inode * inode)
 
        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;
index 53dceb0c659308c661a9c8e7deeced2dff27502e..fdba4d1d3c60996c438008a479975d46a81d6e3c 100644 (file)
@@ -71,6 +71,8 @@ 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();
index 9989fdcf4d5aba4c00e07bd7826e9ccb639624f3..b5177c90d6f111e63fe3d13f498c4bd93306b22f 100644 (file)
@@ -187,6 +187,8 @@ void ext3_delete_inode (struct inode * inode)
 {
        handle_t *handle;
 
+       truncate_inode_pages(&inode->i_data, 0);
+
        if (is_bad_inode(inode))
                goto no_delete;
 
index 96ae85b67eba6800ab9982f0afeb041bd53bd5bf..a7cbe68e22596acfcd6cf5652aa6e07e10f57a63 100644 (file)
@@ -335,6 +335,8 @@ 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);
index b2d18200a003f0feb8cdd41fb7ad9cb0ed18dc15..59c5062cd63f3bcc8af85edbdabda742a0c88325 100644 (file)
@@ -284,6 +284,7 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb)
 
 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;
index 38b1741fa539f8a5ed060a72ee93bafcf2281e28..e3d17e9ea6c19b5b7790c477c2d8cd34b06c146e 100644 (file)
@@ -284,6 +284,7 @@ void hpfs_write_if_changed(struct inode *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();
index 777b90057b893968a2718fb3163407811947c146..3dcc6d2162cb812f4d3392c8a40a8cc1aea326b7 100644 (file)
@@ -1744,6 +1744,7 @@ 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;
index 767c7ecb429ed6f044e1954873c73c1d719eaab8..cff352f4ec18d357d856d7a8758611ad2a7774ab 100644 (file)
@@ -132,6 +132,8 @@ void jfs_delete_inode(struct inode *inode)
            (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);
 
index 3f18c21198d7e2a848573e539316844c3fe2e142..790cc0d0e970a643b7387ea964eb1e8d7fde0fcc 100644 (file)
@@ -24,6 +24,7 @@ static int minix_remount (struct super_block * sb, int * flags, char * data);
 
 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);
index 44795d2f4b30856790ce214d2c10386c1122cf6b..8c8839203cd5a0bae7e0e4cb0fec352748b02391 100644 (file)
@@ -286,6 +286,8 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info)
 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);
        }
index 541b418327c8b18b8f30d294beca9c10d3ca732e..6922469d6fc573415a09a642ae01cf96b72a8879 100644 (file)
@@ -146,6 +146,8 @@ 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...
index 133c28685105613c5f92c50b52e26c6b97d7bde6..effa6c0c467ac083d9b62fb34b56a2946596ef27 100644 (file)
@@ -60,6 +60,8 @@ static void proc_delete_inode(struct inode *inode)
        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)
index b79162a35478ce46fae25af21067844b0fabfd4b..80f32911c0cb4bea686459920215191377287e01 100644 (file)
@@ -63,6 +63,7 @@ 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();
index ff291c973a567f4d9226c3840c98ea002c4ed823..1a8a1bf2154d10475a0bacc89b085070587d48d6 100644 (file)
@@ -33,6 +33,8 @@ void reiserfs_delete_inode(struct inode *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.. */
index 4765aaac9fd2ca1febfae1a13445c19992fb3769..10b994428fef29e6c43747ed2ae5345d264f8bbb 100644 (file)
@@ -331,6 +331,7 @@ 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);
index 0530077d9dd800b8e1fd897bae95edb524e1336e..fa33eceb00113d05bb826a15300c9971e45cb348 100644 (file)
@@ -292,6 +292,7 @@ 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();
index 3d68de39fad6297dbfaed66e9f02b57e21ca604f..b83890beaaacbec45e199c9cf8fc78599423ff07 100644 (file)
@@ -87,6 +87,8 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
  */
 void udf_delete_inode(struct inode * inode)
 {
+       truncate_inode_pages(&inode->i_data, 0);
+
        if (is_bad_inode(inode))
                goto no_delete;
 
index 718627ca8b5c6b866fc826efb061f0fffe798856..55f4aa16e3fc930259964fabbb0dce8c905fccbb 100644 (file)
@@ -804,6 +804,7 @@ 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);
index db2c9e8d99095ace5bae8324f2387b9ebdbaf7c6..0d627a37da954ea68663797d4d45bffaf5fd89b5 100644 (file)
@@ -666,6 +666,7 @@ static void shmem_delete_inode(struct inode *inode)
        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);