diff options
author | Mark Fasheh <mark.fasheh@oracle.com> | 2005-09-09 16:01:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 16:57:27 -0400 |
commit | fef266580e5cf897a1b63528fc6b1185e2d6bb87 (patch) | |
tree | a432a35914b8a74f0c8c73ca57257c7e609365d3 | |
parent | e85b565233236a2a833adea73fb2f0e0f8fa2a61 (diff) |
[PATCH] update filesystems for new delete_inode behavior
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>
-rw-r--r-- | fs/affs/inode.c | 1 | ||||
-rw-r--r-- | fs/bfs/inode.c | 2 | ||||
-rw-r--r-- | fs/ext2/inode.c | 2 | ||||
-rw-r--r-- | fs/ext3/inode.c | 2 | ||||
-rw-r--r-- | fs/fat/inode.c | 2 | ||||
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 1 | ||||
-rw-r--r-- | fs/hpfs/inode.c | 1 | ||||
-rw-r--r-- | fs/jffs/inode-v23.c | 1 | ||||
-rw-r--r-- | fs/jfs/inode.c | 2 | ||||
-rw-r--r-- | fs/minix/inode.c | 1 | ||||
-rw-r--r-- | fs/ncpfs/inode.c | 2 | ||||
-rw-r--r-- | fs/nfs/inode.c | 2 | ||||
-rw-r--r-- | fs/proc/inode.c | 2 | ||||
-rw-r--r-- | fs/qnx4/inode.c | 1 | ||||
-rw-r--r-- | fs/reiserfs/inode.c | 2 | ||||
-rw-r--r-- | fs/smbfs/inode.c | 1 | ||||
-rw-r--r-- | fs/sysv/inode.c | 1 | ||||
-rw-r--r-- | fs/udf/inode.c | 2 | ||||
-rw-r--r-- | fs/ufs/inode.c | 1 | ||||
-rw-r--r-- | mm/shmem.c | 1 |
20 files changed, 30 insertions, 0 deletions
diff --git a/fs/affs/inode.c b/fs/affs/inode.c index 7aa6f2004536..9ebe881c6786 100644 --- a/fs/affs/inode.c +++ b/fs/affs/inode.c | |||
@@ -255,6 +255,7 @@ void | |||
255 | affs_delete_inode(struct inode *inode) | 255 | affs_delete_inode(struct inode *inode) |
256 | { | 256 | { |
257 | pr_debug("AFFS: delete_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink); | 257 | pr_debug("AFFS: delete_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink); |
258 | truncate_inode_pages(&inode->i_data, 0); | ||
258 | inode->i_size = 0; | 259 | inode->i_size = 0; |
259 | if (S_ISREG(inode->i_mode)) | 260 | if (S_ISREG(inode->i_mode)) |
260 | affs_truncate(inode); | 261 | affs_truncate(inode); |
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 64e0fb33fc0c..628c2c1a7d7e 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
@@ -143,6 +143,8 @@ static void bfs_delete_inode(struct inode * inode) | |||
143 | 143 | ||
144 | dprintf("ino=%08lx\n", inode->i_ino); | 144 | dprintf("ino=%08lx\n", inode->i_ino); |
145 | 145 | ||
146 | truncate_inode_pages(&inode->i_data, 0); | ||
147 | |||
146 | if (inode->i_ino < BFS_ROOT_INO || inode->i_ino > info->si_lasti) { | 148 | if (inode->i_ino < BFS_ROOT_INO || inode->i_ino > info->si_lasti) { |
147 | printf("invalid ino=%08lx\n", inode->i_ino); | 149 | printf("invalid ino=%08lx\n", inode->i_ino); |
148 | return; | 150 | return; |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 53dceb0c6593..fdba4d1d3c60 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -71,6 +71,8 @@ void ext2_put_inode(struct inode *inode) | |||
71 | */ | 71 | */ |
72 | void ext2_delete_inode (struct inode * inode) | 72 | void ext2_delete_inode (struct inode * inode) |
73 | { | 73 | { |
74 | truncate_inode_pages(&inode->i_data, 0); | ||
75 | |||
74 | if (is_bad_inode(inode)) | 76 | if (is_bad_inode(inode)) |
75 | goto no_delete; | 77 | goto no_delete; |
76 | EXT2_I(inode)->i_dtime = get_seconds(); | 78 | EXT2_I(inode)->i_dtime = get_seconds(); |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 9989fdcf4d5a..b5177c90d6f1 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -187,6 +187,8 @@ void ext3_delete_inode (struct inode * inode) | |||
187 | { | 187 | { |
188 | handle_t *handle; | 188 | handle_t *handle; |
189 | 189 | ||
190 | truncate_inode_pages(&inode->i_data, 0); | ||
191 | |||
190 | if (is_bad_inode(inode)) | 192 | if (is_bad_inode(inode)) |
191 | goto no_delete; | 193 | goto no_delete; |
192 | 194 | ||
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 96ae85b67eba..a7cbe68e2259 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -335,6 +335,8 @@ EXPORT_SYMBOL(fat_build_inode); | |||
335 | 335 | ||
336 | static void fat_delete_inode(struct inode *inode) | 336 | static void fat_delete_inode(struct inode *inode) |
337 | { | 337 | { |
338 | truncate_inode_pages(&inode->i_data, 0); | ||
339 | |||
338 | if (!is_bad_inode(inode)) { | 340 | if (!is_bad_inode(inode)) { |
339 | inode->i_size = 0; | 341 | inode->i_size = 0; |
340 | fat_truncate(inode); | 342 | fat_truncate(inode); |
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index b2d18200a003..59c5062cd63f 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -284,6 +284,7 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb) | |||
284 | 284 | ||
285 | static void hostfs_delete_inode(struct inode *inode) | 285 | static void hostfs_delete_inode(struct inode *inode) |
286 | { | 286 | { |
287 | truncate_inode_pages(&inode->i_data, 0); | ||
287 | if(HOSTFS_I(inode)->fd != -1) { | 288 | if(HOSTFS_I(inode)->fd != -1) { |
288 | close_file(&HOSTFS_I(inode)->fd); | 289 | close_file(&HOSTFS_I(inode)->fd); |
289 | HOSTFS_I(inode)->fd = -1; | 290 | HOSTFS_I(inode)->fd = -1; |
diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c index 38b1741fa539..e3d17e9ea6c1 100644 --- a/fs/hpfs/inode.c +++ b/fs/hpfs/inode.c | |||
@@ -284,6 +284,7 @@ void hpfs_write_if_changed(struct inode *inode) | |||
284 | 284 | ||
285 | void hpfs_delete_inode(struct inode *inode) | 285 | void hpfs_delete_inode(struct inode *inode) |
286 | { | 286 | { |
287 | truncate_inode_pages(&inode->i_data, 0); | ||
287 | lock_kernel(); | 288 | lock_kernel(); |
288 | hpfs_remove_fnode(inode->i_sb, inode->i_ino); | 289 | hpfs_remove_fnode(inode->i_sb, inode->i_ino); |
289 | unlock_kernel(); | 290 | unlock_kernel(); |
diff --git a/fs/jffs/inode-v23.c b/fs/jffs/inode-v23.c index 777b90057b89..3dcc6d2162cb 100644 --- a/fs/jffs/inode-v23.c +++ b/fs/jffs/inode-v23.c | |||
@@ -1744,6 +1744,7 @@ jffs_delete_inode(struct inode *inode) | |||
1744 | D3(printk("jffs_delete_inode(): inode->i_ino == %lu\n", | 1744 | D3(printk("jffs_delete_inode(): inode->i_ino == %lu\n", |
1745 | inode->i_ino)); | 1745 | inode->i_ino)); |
1746 | 1746 | ||
1747 | truncate_inode_pages(&inode->i_data, 0); | ||
1747 | lock_kernel(); | 1748 | lock_kernel(); |
1748 | inode->i_size = 0; | 1749 | inode->i_size = 0; |
1749 | inode->i_blocks = 0; | 1750 | inode->i_blocks = 0; |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 767c7ecb429e..cff352f4ec18 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
@@ -132,6 +132,8 @@ void jfs_delete_inode(struct inode *inode) | |||
132 | (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I))) | 132 | (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I))) |
133 | return; | 133 | return; |
134 | 134 | ||
135 | truncate_inode_pages(&inode->i_data, 0); | ||
136 | |||
135 | if (test_cflag(COMMIT_Freewmap, inode)) | 137 | if (test_cflag(COMMIT_Freewmap, inode)) |
136 | jfs_free_zero_link(inode); | 138 | jfs_free_zero_link(inode); |
137 | 139 | ||
diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 3f18c21198d7..790cc0d0e970 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c | |||
@@ -24,6 +24,7 @@ static int minix_remount (struct super_block * sb, int * flags, char * data); | |||
24 | 24 | ||
25 | static void minix_delete_inode(struct inode *inode) | 25 | static void minix_delete_inode(struct inode *inode) |
26 | { | 26 | { |
27 | truncate_inode_pages(&inode->i_data, 0); | ||
27 | inode->i_size = 0; | 28 | inode->i_size = 0; |
28 | minix_truncate(inode); | 29 | minix_truncate(inode); |
29 | minix_free_inode(inode); | 30 | minix_free_inode(inode); |
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index 44795d2f4b30..8c8839203cd5 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c | |||
@@ -286,6 +286,8 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info) | |||
286 | static void | 286 | static void |
287 | ncp_delete_inode(struct inode *inode) | 287 | ncp_delete_inode(struct inode *inode) |
288 | { | 288 | { |
289 | truncate_inode_pages(&inode->i_data, 0); | ||
290 | |||
289 | if (S_ISDIR(inode->i_mode)) { | 291 | if (S_ISDIR(inode->i_mode)) { |
290 | DDPRINTK("ncp_delete_inode: put directory %ld\n", inode->i_ino); | 292 | DDPRINTK("ncp_delete_inode: put directory %ld\n", inode->i_ino); |
291 | } | 293 | } |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 541b418327c8..6922469d6fc5 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -146,6 +146,8 @@ nfs_delete_inode(struct inode * inode) | |||
146 | { | 146 | { |
147 | dprintk("NFS: delete_inode(%s/%ld)\n", inode->i_sb->s_id, inode->i_ino); | 147 | dprintk("NFS: delete_inode(%s/%ld)\n", inode->i_sb->s_id, inode->i_ino); |
148 | 148 | ||
149 | truncate_inode_pages(&inode->i_data, 0); | ||
150 | |||
149 | nfs_wb_all(inode); | 151 | nfs_wb_all(inode); |
150 | /* | 152 | /* |
151 | * The following should never happen... | 153 | * The following should never happen... |
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 133c28685105..effa6c0c467a 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
@@ -60,6 +60,8 @@ static void proc_delete_inode(struct inode *inode) | |||
60 | struct proc_dir_entry *de; | 60 | struct proc_dir_entry *de; |
61 | struct task_struct *tsk; | 61 | struct task_struct *tsk; |
62 | 62 | ||
63 | truncate_inode_pages(&inode->i_data, 0); | ||
64 | |||
63 | /* Let go of any associated process */ | 65 | /* Let go of any associated process */ |
64 | tsk = PROC_I(inode)->task; | 66 | tsk = PROC_I(inode)->task; |
65 | if (tsk) | 67 | if (tsk) |
diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c index b79162a35478..80f32911c0cb 100644 --- a/fs/qnx4/inode.c +++ b/fs/qnx4/inode.c | |||
@@ -63,6 +63,7 @@ int qnx4_sync_inode(struct inode *inode) | |||
63 | static void qnx4_delete_inode(struct inode *inode) | 63 | static void qnx4_delete_inode(struct inode *inode) |
64 | { | 64 | { |
65 | QNX4DEBUG(("qnx4: deleting inode [%lu]\n", (unsigned long) inode->i_ino)); | 65 | QNX4DEBUG(("qnx4: deleting inode [%lu]\n", (unsigned long) inode->i_ino)); |
66 | truncate_inode_pages(&inode->i_data, 0); | ||
66 | inode->i_size = 0; | 67 | inode->i_size = 0; |
67 | qnx4_truncate(inode); | 68 | qnx4_truncate(inode); |
68 | lock_kernel(); | 69 | lock_kernel(); |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index ff291c973a56..1a8a1bf2154d 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -33,6 +33,8 @@ void reiserfs_delete_inode(struct inode *inode) | |||
33 | 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb); | 33 | 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb); |
34 | struct reiserfs_transaction_handle th; | 34 | struct reiserfs_transaction_handle th; |
35 | 35 | ||
36 | truncate_inode_pages(&inode->i_data, 0); | ||
37 | |||
36 | reiserfs_write_lock(inode->i_sb); | 38 | reiserfs_write_lock(inode->i_sb); |
37 | 39 | ||
38 | /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ | 40 | /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ |
diff --git a/fs/smbfs/inode.c b/fs/smbfs/inode.c index 4765aaac9fd2..10b994428fef 100644 --- a/fs/smbfs/inode.c +++ b/fs/smbfs/inode.c | |||
@@ -331,6 +331,7 @@ static void | |||
331 | smb_delete_inode(struct inode *ino) | 331 | smb_delete_inode(struct inode *ino) |
332 | { | 332 | { |
333 | DEBUG1("ino=%ld\n", ino->i_ino); | 333 | DEBUG1("ino=%ld\n", ino->i_ino); |
334 | truncate_inode_pages(&ino->i_data, 0); | ||
334 | lock_kernel(); | 335 | lock_kernel(); |
335 | if (smb_close(ino)) | 336 | if (smb_close(ino)) |
336 | PARANOIA("could not close inode %ld\n", ino->i_ino); | 337 | PARANOIA("could not close inode %ld\n", ino->i_ino); |
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c index 0530077d9dd8..fa33eceb0011 100644 --- a/fs/sysv/inode.c +++ b/fs/sysv/inode.c | |||
@@ -292,6 +292,7 @@ int sysv_sync_inode(struct inode * inode) | |||
292 | 292 | ||
293 | static void sysv_delete_inode(struct inode *inode) | 293 | static void sysv_delete_inode(struct inode *inode) |
294 | { | 294 | { |
295 | truncate_inode_pages(&inode->i_data, 0); | ||
295 | inode->i_size = 0; | 296 | inode->i_size = 0; |
296 | sysv_truncate(inode); | 297 | sysv_truncate(inode); |
297 | lock_kernel(); | 298 | lock_kernel(); |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 3d68de39fad6..b83890beaaac 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -87,6 +87,8 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); | |||
87 | */ | 87 | */ |
88 | void udf_delete_inode(struct inode * inode) | 88 | void udf_delete_inode(struct inode * inode) |
89 | { | 89 | { |
90 | truncate_inode_pages(&inode->i_data, 0); | ||
91 | |||
90 | if (is_bad_inode(inode)) | 92 | if (is_bad_inode(inode)) |
91 | goto no_delete; | 93 | goto no_delete; |
92 | 94 | ||
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index 718627ca8b5c..55f4aa16e3fc 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -804,6 +804,7 @@ int ufs_sync_inode (struct inode *inode) | |||
804 | 804 | ||
805 | void ufs_delete_inode (struct inode * inode) | 805 | void ufs_delete_inode (struct inode * inode) |
806 | { | 806 | { |
807 | truncate_inode_pages(&inode->i_data, 0); | ||
807 | /*UFS_I(inode)->i_dtime = CURRENT_TIME;*/ | 808 | /*UFS_I(inode)->i_dtime = CURRENT_TIME;*/ |
808 | lock_kernel(); | 809 | lock_kernel(); |
809 | mark_inode_dirty(inode); | 810 | mark_inode_dirty(inode); |
diff --git a/mm/shmem.c b/mm/shmem.c index db2c9e8d9909..0d627a37da95 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -666,6 +666,7 @@ static void shmem_delete_inode(struct inode *inode) | |||
666 | struct shmem_inode_info *info = SHMEM_I(inode); | 666 | struct shmem_inode_info *info = SHMEM_I(inode); |
667 | 667 | ||
668 | if (inode->i_op->truncate == shmem_truncate) { | 668 | if (inode->i_op->truncate == shmem_truncate) { |
669 | truncate_inode_pages(inode->i_mapping, 0); | ||
669 | shmem_unacct_size(info->flags, inode->i_size); | 670 | shmem_unacct_size(info->flags, inode->i_size); |
670 | inode->i_size = 0; | 671 | inode->i_size = 0; |
671 | shmem_truncate(inode); | 672 | shmem_truncate(inode); |