]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/minix/inode.c
switch minix to ->evict_inode(), fix write_inode/delete_inode race
[net-next-2.6.git] / fs / minix / inode.c
index 125062f55ef2d7b51c2afbf5183817cdaa7e55e6..e39d6bf2e8fbcf3ccbc36117aca4fd03a67c862e 100644 (file)
@@ -24,12 +24,17 @@ static int minix_write_inode(struct inode *inode,
 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)
@@ -96,7 +101,7 @@ static const struct super_operations minix_sops = {
        .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,