Commit 149f4211 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds

[PATCH] hugetlbfs: clean up hugetlbfs_delete_inode

Make hugetlbfs looks the same as generic_detelte_inode, fixing a bunch of
missing updates to it at the same time.  Rename it to
hugetlbfs_do_delete_inode and add a real hugetlbfs_delete_inode that
implements ->delete_inode.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 96527980
...@@ -224,19 +224,44 @@ static void truncate_hugepages(struct address_space *mapping, loff_t lstart) ...@@ -224,19 +224,44 @@ static void truncate_hugepages(struct address_space *mapping, loff_t lstart)
static void hugetlbfs_delete_inode(struct inode *inode) static void hugetlbfs_delete_inode(struct inode *inode)
{ {
hlist_del_init(&inode->i_hash); if (inode->i_data.nrpages)
truncate_hugepages(&inode->i_data, 0);
clear_inode(inode);
}
static void hugetlbfs_do_delete_inode(struct inode *inode)
{
struct super_operations *op = inode->i_sb->s_op;
list_del_init(&inode->i_list); list_del_init(&inode->i_list);
list_del_init(&inode->i_sb_list); list_del_init(&inode->i_sb_list);
inode->i_state |= I_FREEING; inode->i_state |= I_FREEING;
inodes_stat.nr_inodes--; inodes_stat.nr_inodes--;
spin_unlock(&inode_lock); spin_unlock(&inode_lock);
if (inode->i_data.nrpages)
truncate_hugepages(&inode->i_data, 0);
security_inode_delete(inode); security_inode_delete(inode);
clear_inode(inode); if (op->delete_inode) {
void (*delete)(struct inode *) = op->delete_inode;
if (!is_bad_inode(inode))
DQUOT_INIT(inode);
/* Filesystems implementing their own
* s_op->delete_inode are required to call
* truncate_inode_pages and clear_inode()
* internally
*/
delete(inode);
} else {
truncate_inode_pages(&inode->i_data, 0);
clear_inode(inode);
}
spin_lock(&inode_lock);
hlist_del_init(&inode->i_hash);
spin_unlock(&inode_lock);
wake_up_inode(inode);
if (inode->i_state != I_CLEAR)
BUG();
destroy_inode(inode); destroy_inode(inode);
} }
...@@ -276,7 +301,7 @@ static void hugetlbfs_forget_inode(struct inode *inode) ...@@ -276,7 +301,7 @@ static void hugetlbfs_forget_inode(struct inode *inode)
static void hugetlbfs_drop_inode(struct inode *inode) static void hugetlbfs_drop_inode(struct inode *inode)
{ {
if (!inode->i_nlink) if (!inode->i_nlink)
hugetlbfs_delete_inode(inode); hugetlbfs_do_delete_inode(inode);
else else
hugetlbfs_forget_inode(inode); hugetlbfs_forget_inode(inode);
} }
...@@ -594,6 +619,7 @@ static struct super_operations hugetlbfs_ops = { ...@@ -594,6 +619,7 @@ static struct super_operations hugetlbfs_ops = {
.alloc_inode = hugetlbfs_alloc_inode, .alloc_inode = hugetlbfs_alloc_inode,
.destroy_inode = hugetlbfs_destroy_inode, .destroy_inode = hugetlbfs_destroy_inode,
.statfs = hugetlbfs_statfs, .statfs = hugetlbfs_statfs,
.delete_inode = hugetlbfs_delete_inode,
.drop_inode = hugetlbfs_drop_inode, .drop_inode = hugetlbfs_drop_inode,
.put_super = hugetlbfs_put_super, .put_super = hugetlbfs_put_super,
}; };
......
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