|
@@ -858,15 +858,15 @@ out_free:
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
-int hugetlb_get_quota(struct address_space *mapping)
|
|
|
+int hugetlb_get_quota(struct address_space *mapping, long delta)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb);
|
|
|
|
|
|
if (sbinfo->free_blocks > -1) {
|
|
|
spin_lock(&sbinfo->stat_lock);
|
|
|
- if (sbinfo->free_blocks > 0)
|
|
|
- sbinfo->free_blocks--;
|
|
|
+ if (sbinfo->free_blocks - delta >= 0)
|
|
|
+ sbinfo->free_blocks -= delta;
|
|
|
else
|
|
|
ret = -ENOMEM;
|
|
|
spin_unlock(&sbinfo->stat_lock);
|
|
@@ -875,13 +875,13 @@ int hugetlb_get_quota(struct address_space *mapping)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-void hugetlb_put_quota(struct address_space *mapping)
|
|
|
+void hugetlb_put_quota(struct address_space *mapping, long delta)
|
|
|
{
|
|
|
struct hugetlbfs_sb_info *sbinfo = HUGETLBFS_SB(mapping->host->i_sb);
|
|
|
|
|
|
if (sbinfo->free_blocks > -1) {
|
|
|
spin_lock(&sbinfo->stat_lock);
|
|
|
- sbinfo->free_blocks++;
|
|
|
+ sbinfo->free_blocks += delta;
|
|
|
spin_unlock(&sbinfo->stat_lock);
|
|
|
}
|
|
|
}
|