From 09fbb6875763ca83275d7bd1129db976a45c09a3 Mon Sep 17 00:00:00 2001 From: Adam Litke Date: Wed, 14 Nov 2007 16:59:41 -0800 Subject: [PATCH] --- yaml --- r: 73699 b: refs/heads/master c: 9a119c056dc2a9970901954a6d561d50a95e528d h: refs/heads/master i: 73697: 19ad9bca93e5c98007e683f73f38a80466bbc677 73695: 816f3dfaf83b2e42c1878c001cbb2e13071f2419 v: v3 --- [refs] | 2 +- trunk/fs/hugetlbfs/inode.c | 10 +++++----- trunk/include/linux/hugetlb.h | 4 ++-- trunk/mm/hugetlb.c | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 7afe81f05726..08675e69801d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2fc39cec6a9b5b41727d3386b780b69422a15152 +refs/heads/master: 9a119c056dc2a9970901954a6d561d50a95e528d diff --git a/trunk/fs/hugetlbfs/inode.c b/trunk/fs/hugetlbfs/inode.c index 6513f5655861..09ee07f02663 100644 --- a/trunk/fs/hugetlbfs/inode.c +++ b/trunk/fs/hugetlbfs/inode.c @@ -858,15 +858,15 @@ hugetlbfs_fill_super(struct super_block *sb, void *data, int silent) 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); } } diff --git a/trunk/include/linux/hugetlb.h b/trunk/include/linux/hugetlb.h index e22368656b38..8104e5af75ab 100644 --- a/trunk/include/linux/hugetlb.h +++ b/trunk/include/linux/hugetlb.h @@ -165,8 +165,8 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) extern const struct file_operations hugetlbfs_file_operations; extern struct vm_operations_struct hugetlb_vm_ops; struct file *hugetlb_file_setup(const char *name, size_t); -int hugetlb_get_quota(struct address_space *mapping); -void hugetlb_put_quota(struct address_space *mapping); +int hugetlb_get_quota(struct address_space *mapping, long delta); +void hugetlb_put_quota(struct address_space *mapping, long delta); static inline int is_file_hugepages(struct file *file) { diff --git a/trunk/mm/hugetlb.c b/trunk/mm/hugetlb.c index bc12b0adfa87..1e317465ecd1 100644 --- a/trunk/mm/hugetlb.c +++ b/trunk/mm/hugetlb.c @@ -132,7 +132,7 @@ static void free_huge_page(struct page *page) } spin_unlock(&hugetlb_lock); if (mapping) - hugetlb_put_quota(mapping); + hugetlb_put_quota(mapping, 1); set_page_private(page, 0); } @@ -390,7 +390,7 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma, struct page *page; struct address_space *mapping = vma->vm_file->f_mapping; - if (hugetlb_get_quota(mapping)) + if (hugetlb_get_quota(mapping, 1)) return ERR_PTR(-VM_FAULT_SIGBUS); if (vma->vm_flags & VM_MAYSHARE)