Skip to content

Commit

Permalink
[PATCH] hugetlbfs: clean up hugetlbfs_delete_inode
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Hellwig authored and Linus Torvalds committed Oct 30, 2005
1 parent 9652798 commit 149f421
Showing 1 changed file with 32 additions and 6 deletions.
38 changes: 32 additions & 6 deletions fs/hugetlbfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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,
};
Expand Down

0 comments on commit 149f421

Please sign in to comment.