Commit 67663831 authored by Paolo \'Blaisorblade\' Giarrusso's avatar Paolo \'Blaisorblade\' Giarrusso Committed by Linus Torvalds

[PATCH] uml: Fixes an host fd leak caused by hostfs.

In detail, on 2.4 we used force_delete() to make sure inode were not cached,
and we then close the host file when the inode is cleared; when porting to 2.6
the "force_delete" thing was dropped, and this patch adds a fix for this (by
setting drop_inode = generic_delete_inode).  Search for drop_inode in the 2.6
Documentation/filesystems/vfs.txt for info about this.
Signed-off-by: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent afce448c
...@@ -284,13 +284,25 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb) ...@@ -284,13 +284,25 @@ 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)
{
if(HOSTFS_I(inode)->fd != -1) {
close_file(&HOSTFS_I(inode)->fd);
printk("Closing host fd in .delete_inode\n");
HOSTFS_I(inode)->fd = -1;
}
clear_inode(inode);
}
static void hostfs_destroy_inode(struct inode *inode) static void hostfs_destroy_inode(struct inode *inode)
{ {
if(HOSTFS_I(inode)->host_filename) if(HOSTFS_I(inode)->host_filename)
kfree(HOSTFS_I(inode)->host_filename); kfree(HOSTFS_I(inode)->host_filename);
if(HOSTFS_I(inode)->fd != -1) if(HOSTFS_I(inode)->fd != -1) {
close_file(&HOSTFS_I(inode)->fd); close_file(&HOSTFS_I(inode)->fd);
printk("Closing host fd in .destroy_inode\n");
}
kfree(HOSTFS_I(inode)); kfree(HOSTFS_I(inode));
} }
...@@ -302,6 +314,8 @@ static void hostfs_read_inode(struct inode *inode) ...@@ -302,6 +314,8 @@ static void hostfs_read_inode(struct inode *inode)
static struct super_operations hostfs_sbops = { static 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,
.read_inode = hostfs_read_inode, .read_inode = hostfs_read_inode,
.statfs = hostfs_statfs, .statfs = hostfs_statfs,
......
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