forked from luck/tmp_suning_uos_patched
[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: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
96527980d4
commit
149f4211af
|
@ -224,19 +224,44 @@ static void truncate_hugepages(struct address_space *mapping, loff_t lstart)
|
|||
|
||||
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_sb_list);
|
||||
inode->i_state |= I_FREEING;
|
||||
inodes_stat.nr_inodes--;
|
||||
spin_unlock(&inode_lock);
|
||||
|
||||
if (inode->i_data.nrpages)
|
||||
truncate_hugepages(&inode->i_data, 0);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -276,7 +301,7 @@ static void hugetlbfs_forget_inode(struct inode *inode)
|
|||
static void hugetlbfs_drop_inode(struct inode *inode)
|
||||
{
|
||||
if (!inode->i_nlink)
|
||||
hugetlbfs_delete_inode(inode);
|
||||
hugetlbfs_do_delete_inode(inode);
|
||||
else
|
||||
hugetlbfs_forget_inode(inode);
|
||||
}
|
||||
|
@ -594,6 +619,7 @@ static struct super_operations hugetlbfs_ops = {
|
|||
.alloc_inode = hugetlbfs_alloc_inode,
|
||||
.destroy_inode = hugetlbfs_destroy_inode,
|
||||
.statfs = hugetlbfs_statfs,
|
||||
.delete_inode = hugetlbfs_delete_inode,
|
||||
.drop_inode = hugetlbfs_drop_inode,
|
||||
.put_super = hugetlbfs_put_super,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user