switch affs to ->evict_inode()
Al Viro [Sun, 6 Jun 2010 14:16:41 +0000 (10:16 -0400)]
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/affs/affs.h
fs/affs/inode.c
fs/affs/super.c

index f05b615..a8cbdeb 100644 (file)
@@ -171,8 +171,7 @@ extern int  affs_rename(struct inode *old_dir, struct dentry *old_dentry,
 extern unsigned long            affs_parent_ino(struct inode *dir);
 extern struct inode            *affs_new_inode(struct inode *dir);
 extern int                      affs_notify_change(struct dentry *dentry, struct iattr *attr);
-extern void                     affs_delete_inode(struct inode *inode);
-extern void                     affs_clear_inode(struct inode *inode);
+extern void                     affs_evict_inode(struct inode *inode);
 extern struct inode            *affs_iget(struct super_block *sb,
                                        unsigned long ino);
 extern int                      affs_write_inode(struct inode *inode,
index 6883d5f..3a0fdec 100644 (file)
@@ -252,23 +252,19 @@ out:
 }
 
 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;
-       affs_truncate(inode);
-       clear_inode(inode);
-       affs_free_block(inode->i_sb, inode->i_ino);
-}
-
-void
-affs_clear_inode(struct inode *inode)
+affs_evict_inode(struct inode *inode)
 {
        unsigned long cache_page;
+       pr_debug("AFFS: evict_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
+       truncate_inode_pages(&inode->i_data, 0);
 
-       pr_debug("AFFS: clear_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
+       if (!inode->i_nlink) {
+               inode->i_size = 0;
+               affs_truncate(inode);
+       }
 
+       invalidate_inode_buffers(inode);
+       end_writeback(inode);
        affs_free_prealloc(inode);
        cache_page = (unsigned long)AFFS_I(inode)->i_lc;
        if (cache_page) {
@@ -280,6 +276,9 @@ affs_clear_inode(struct inode *inode)
        affs_brelse(AFFS_I(inode)->i_ext_bh);
        AFFS_I(inode)->i_ext_last = ~1;
        AFFS_I(inode)->i_ext_bh = NULL;
+
+       if (!inode->i_nlink)
+               affs_free_block(inode->i_sb, inode->i_ino);
 }
 
 struct inode *
index 16a3e47..2c804a8 100644 (file)
@@ -140,8 +140,7 @@ static const struct super_operations affs_sops = {
        .alloc_inode    = affs_alloc_inode,
        .destroy_inode  = affs_destroy_inode,
        .write_inode    = affs_write_inode,
-       .delete_inode   = affs_delete_inode,
-       .clear_inode    = affs_clear_inode,
+       .evict_inode    = affs_evict_inode,
        .put_super      = affs_put_super,
        .write_super    = affs_write_super,
        .sync_fs        = affs_sync_fs,