Commit e971a6d7 authored by Al Viro's avatar Al Viro

stop icache pollution in hostfs, switch to ->evict_inode()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f053ddde
...@@ -241,16 +241,13 @@ static struct inode *hostfs_iget(struct super_block *sb) ...@@ -241,16 +241,13 @@ static struct inode *hostfs_iget(struct super_block *sb)
struct inode *inode; struct inode *inode;
long ret; long ret;
inode = iget_locked(sb, 0); inode = new_inode(sb);
if (!inode) if (!inode)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
if (inode->i_state & I_NEW) { ret = hostfs_read_inode(inode);
ret = hostfs_read_inode(inode); if (ret < 0) {
if (ret < 0) { iput(inode);
iget_failed(inode); return ERR_PTR(ret);
return ERR_PTR(ret);
}
unlock_new_inode(inode);
} }
return inode; return inode;
} }
...@@ -299,29 +296,19 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb) ...@@ -299,29 +296,19 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb)
return &hi->vfs_inode; return &hi->vfs_inode;
} }
static void hostfs_delete_inode(struct inode *inode) static void hostfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode);
if (HOSTFS_I(inode)->fd != -1) { if (HOSTFS_I(inode)->fd != -1) {
close_file(&HOSTFS_I(inode)->fd); close_file(&HOSTFS_I(inode)->fd);
HOSTFS_I(inode)->fd = -1; HOSTFS_I(inode)->fd = -1;
} }
clear_inode(inode);
} }
static void hostfs_destroy_inode(struct inode *inode) static void hostfs_destroy_inode(struct inode *inode)
{ {
kfree(HOSTFS_I(inode)->host_filename); kfree(HOSTFS_I(inode)->host_filename);
/*
* XXX: This should not happen, probably. The check is here for
* additional safety.
*/
if (HOSTFS_I(inode)->fd != -1) {
close_file(&HOSTFS_I(inode)->fd);
printk(KERN_DEBUG "Closing host fd in .destroy_inode\n");
}
kfree(HOSTFS_I(inode)); kfree(HOSTFS_I(inode));
} }
...@@ -339,9 +326,8 @@ static int hostfs_show_options(struct seq_file *seq, struct vfsmount *vfs) ...@@ -339,9 +326,8 @@ static int hostfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
static const struct super_operations hostfs_sbops = { static const struct super_operations hostfs_sbops = {
.alloc_inode = hostfs_alloc_inode, .alloc_inode = hostfs_alloc_inode,
.drop_inode = generic_delete_inode,
.delete_inode = hostfs_delete_inode,
.destroy_inode = hostfs_destroy_inode, .destroy_inode = hostfs_destroy_inode,
.evict_inode = hostfs_evict_inode,
.statfs = hostfs_statfs, .statfs = hostfs_statfs,
.show_options = hostfs_show_options, .show_options = hostfs_show_options,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment