convert ext3 to ->evict_inode()
PATCH 21/58 convert ext3 to ->evict_inode()
Signed-off-by Al Viro <[email protected]>
--- fs/ext3/ialloc.c | 12 ------------ fs/ext3/inode.c | 36 ++++++++++++++++++++++++++---------- fs/ext3/super.c | 14 +------------- include/linux/ext3_fs.h | 2 +- 4 files changed, 28 insertions(+), 36 deletions(-)
fs/ext3/ialloc.c +0 -12
@@ -119,20 +119,8 @@ void ext3_free_inode (handle_t *handle, struct inode * inode) ino = inode->i_ino;ext3_debug ("freeing inode %lu\n" , ino); -/* -* Note: we must free any quota before locking the superblock, -* as writing the quota to disk may need the lock as well. -*/ -dquot_initialize (inode); -ext3_xattr_delete_inode (handle, inode); -dquot_free_inode (inode); -dquot_drop (inode); - is_directory =S_ISDIR (inode->i_mode); -/* Do this BEFORE marking the inode not in use or returning an error */ -clear_inode (inode); - es =EXT3_SB (sb)->s_es;if (ino <EXT3_FIRST_INO (sb) || ino >le32_to_cpu (es->s_inodes_count)) { ext3_error (sb, "ext3_free_inode",
fs/ext3/inode.c +26 -10
@@ -190,18 +190,28 @@ static int truncate_restart_transaction(handle_t *handle, struct inode *inode) }/* -* Called at the last iput() if i_nlink is zero. +* Called at inode eviction from icache */ -void ext3_delete_inode (struct inode * inode) +void ext3_evict_inode (struct inode *inode) { +struct ext3_block_alloc_info *rsv;handle_t *handle; +int want_delete =0 ; -if (!is_bad_inode (inode)) +if (!inode->i_nlink && !is_bad_inode (inode)) {dquot_initialize (inode); + want_delete =1 ; + }truncate_inode_pages (&inode->i_data,0 ); -if (is_bad_inode (inode)) +ext3_discard_reservation (inode); + rsv =EXT3_I (inode)->i_block_alloc_info; +EXT3_I (inode)->i_block_alloc_info =NULL ; +if (unlikely (rsv)) +kfree (rsv); + +if (!want_delete) goto no_delete; handle =start_transaction (inode);
@@ -220,6 +230,7 @@ void ext3_delete_inode (struct inode * inode) inode->i_size =0 ;if (inode->i_blocks)ext3_truncate (inode); +end_writeback (inode);/* * Kill off the orphan record which ext3_truncate created. * AKPM: I think this can be inside the above `if'.
@@ -238,15 +249,20 @@ void ext3_delete_inode (struct inode * inode)* having errors), but we can't free the inode if the mark_dirty * fails. */ -if (ext3_mark_inode_dirty (handle, inode)) -/* If that failed, just do the required in-core inode clear. */ -clear_inode (inode); -else +if (ext3_mark_inode_dirty (handle, inode)) { +/* If that failed, just dquot_drop() and be done with that */ +dquot_drop (inode); + }else { +ext3_xattr_delete_inode (handle, inode); +dquot_free_inode (inode); +dquot_drop (inode);ext3_free_inode (handle, inode); + }ext3_journal_stop (handle);return ; no_delete: -clear_inode (inode);/* We must guarantee clearing of inode... */ +end_writeback (inode); +dquot_drop (inode); } typedef struct {
@@ -2564,7 +2580,7 @@ out_stop:* If this was a simple ftruncate(), and the file will remain alive * then we need to clear up the orphan record which we created above. * However, if this was a real unlink then we were called by -* ext3_delete_inode(), and we allow that function to clean up the +* ext3_evict_inode(), and we allow that function to clean up the * orphan info for us. */ if (inode->i_nlink)
fs/ext3/super.c +1 -13
@@ -527,17 +527,6 @@ static void destroy_inodecache(void)kmem_cache_destroy (ext3_inode_cachep); } -static void ext3_clear_inode (struct inode *inode) -{ -struct ext3_block_alloc_info *rsv =EXT3_I (inode)->i_block_alloc_info; - -dquot_drop (inode); -ext3_discard_reservation (inode); -EXT3_I (inode)->i_block_alloc_info =NULL ; -if (unlikely (rsv)) -kfree (rsv); -} -static inline void ext3_show_quota_options (struct seq_file *seq,struct super_block *sb) {#if defined(CONFIG_QUOTA )
@@ -783,14 +772,13 @@ static const struct super_operations ext3_sops = { .destroy_inode = ext3_destroy_inode, .write_inode = ext3_write_inode, .dirty_inode = ext3_dirty_inode, - .delete_inode = ext3_delete_inode, + .evict_inode = ext3_evict_inode, .put_super = ext3_put_super, .sync_fs = ext3_sync_fs, .freeze_fs = ext3_freeze, .unfreeze_fs = ext3_unfreeze, .statfs = ext3_statfs, .remount_fs = ext3_remount, - .clear_inode = ext3_clear_inode, .show_options = ext3_show_options, #ifdef CONFIG_QUOTA .quota_read = ext3_quota_read,
include/linux/ext3_fs.h +1 -1
@@ -896,7 +896,7 @@ int ext3_get_blocks_handle(handle_t *handle, struct inode *inode,extern struct inode *ext3_iget (struct super_block *,unsigned long );extern int ext3_write_inode (struct inode *,struct writeback_control *);extern int ext3_setattr (struct dentry *,struct iattr *); -extern void ext3_delete_inode (struct inode *); +extern void ext3_evict_inode (struct inode *);extern int ext3_sync_inode (handle_t *,struct inode *);extern void ext3_discard_reservation (struct inode *);extern void ext3_dirty_inode (struct inode *);
Signature · 1 line
1.5.6.5