summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm/hugetlb.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 6daf831b14c5..79e5c3b3e850 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -141,12 +141,14 @@ static inline bool subpool_is_free(struct hugepage_subpool *spool)
static inline void unlock_or_release_subpool(struct hugepage_subpool *spool,
unsigned long irq_flags)
{
- spin_unlock_irqrestore(&spool->lock, irq_flags);
+ bool free_subpool = subpool_is_free(spool);
/* If no pages are used, and no other handles to the subpool
* remain, give up any reservations based on minimum size and
* free the subpool */
- if (subpool_is_free(spool)) {
+ spin_unlock_irqrestore(&spool->lock, irq_flags);
+
+ if (free_subpool) {
if (spool->min_hpages != -1)
hugetlb_acct_memory(spool->hstate,
-spool->min_hpages);