ino = inode->i_ino;
        if (ino < 1 || ino > sbi->s_ninodes) {
                printk("minix_free_inode: inode 0 or nonexistent inode\n");
-               goto out;
+               return;
        }
        bit = ino & ((1<<k) - 1);
        ino >>= k;
        if (ino >= sbi->s_imap_blocks) {
                printk("minix_free_inode: nonexistent imap in superblock\n");
-               goto out;
+               return;
        }
 
        minix_clear_inode(inode);       /* clear on-disk copy */
                printk("minix_free_inode: bit %lu already cleared\n", bit);
        spin_unlock(&bitmap_lock);
        mark_buffer_dirty(bh);
- out:
-       clear_inode(inode);             /* clear in-memory copy */
 }
 
 struct inode *minix_new_inode(const struct inode *dir, int mode, int *error)
 
 static int minix_statfs(struct dentry *dentry, struct kstatfs *buf);
 static int minix_remount (struct super_block * sb, int * flags, char * data);
 
-static void minix_delete_inode(struct inode *inode)
+static void minix_evict_inode(struct inode *inode)
 {
        truncate_inode_pages(&inode->i_data, 0);
-       inode->i_size = 0;
-       minix_truncate(inode);
-       minix_free_inode(inode);
+       if (!inode->i_nlink) {
+               inode->i_size = 0;
+               minix_truncate(inode);
+       }
+       invalidate_inode_buffers(inode);
+       end_writeback(inode);
+       if (!inode->i_nlink)
+               minix_free_inode(inode);
 }
 
 static void minix_put_super(struct super_block *sb)
        .alloc_inode    = minix_alloc_inode,
        .destroy_inode  = minix_destroy_inode,
        .write_inode    = minix_write_inode,
-       .delete_inode   = minix_delete_inode,
+       .evict_inode    = minix_evict_inode,
        .put_super      = minix_put_super,
        .statfs         = minix_statfs,
        .remount_fs     = minix_remount,