diff options
Diffstat (limited to 'fs/hugetlbfs/inode.c')
| -rw-r--r-- | fs/hugetlbfs/inode.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 12aca8ed605f..09ee07f02663 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -364,7 +364,6 @@ static void truncate_hugepages(struct inode *inode, loff_t lstart) | |||
| 364 | ++next; | 364 | ++next; | 
| 365 | truncate_huge_page(page); | 365 | truncate_huge_page(page); | 
| 366 | unlock_page(page); | 366 | unlock_page(page); | 
| 367 | hugetlb_put_quota(mapping); | ||
| 368 | freed++; | 367 | freed++; | 
| 369 | } | 368 | } | 
| 370 | huge_pagevec_release(&pvec); | 369 | huge_pagevec_release(&pvec); | 
| @@ -859,15 +858,15 @@ out_free: | |||
| 859 | return -ENOMEM; | 858 | return -ENOMEM; | 
| 860 | } | 859 | } | 
| 861 | 860 | ||
| 862 | int hugetlb_get_quota(struct address_space *mapping) | 861 | int hugetlb_get_quota(struct address_space *mapping, long delta) | 
| 863 | { | 862 | { | 
| 864 | int ret = 0; | 863 | int ret = 0; | 
| 865 | struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); | 864 | struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); | 
| 866 | 865 | ||
| 867 | if (sbinfo->free_blocks > -1) { | 866 | if (sbinfo->free_blocks > -1) { | 
| 868 | spin_lock(&sbinfo->stat_lock); | 867 | spin_lock(&sbinfo->stat_lock); | 
| 869 | if (sbinfo->free_blocks > 0) | 868 | if (sbinfo->free_blocks - delta >= 0) | 
| 870 | sbinfo->free_blocks--; | 869 | sbinfo->free_blocks -= delta; | 
| 871 | else | 870 | else | 
| 872 | ret = -ENOMEM; | 871 | ret = -ENOMEM; | 
| 873 | spin_unlock(&sbinfo->stat_lock); | 872 | spin_unlock(&sbinfo->stat_lock); | 
| @@ -876,13 +875,13 @@ int hugetlb_get_quota(struct address_space *mapping) | |||
| 876 | return ret; | 875 | return ret; | 
| 877 | } | 876 | } | 
| 878 | 877 | ||
| 879 | void hugetlb_put_quota(struct address_space *mapping) | 878 | void hugetlb_put_quota(struct address_space *mapping, long delta) | 
| 880 | { | 879 | { | 
| 881 | struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); | 880 | struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb); | 
| 882 | 881 | ||
| 883 | if (sbinfo->free_blocks > -1) { | 882 | if (sbinfo->free_blocks > -1) { | 
| 884 | spin_lock(&sbinfo->stat_lock); | 883 | spin_lock(&sbinfo->stat_lock); | 
| 885 | sbinfo->free_blocks++; | 884 | sbinfo->free_blocks += delta; | 
| 886 | spin_unlock(&sbinfo->stat_lock); | 885 | spin_unlock(&sbinfo->stat_lock); | 
| 887 | } | 886 | } | 
| 888 | } | 887 | } | 
