aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/balloon_compaction.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/balloon_compaction.c b/mm/balloon_compaction.c
index d3116be5a00f..300117f1a08f 100644
--- a/mm/balloon_compaction.c
+++ b/mm/balloon_compaction.c
@@ -61,6 +61,7 @@ struct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info)
61 bool dequeued_page; 61 bool dequeued_page;
62 62
63 dequeued_page = false; 63 dequeued_page = false;
64 spin_lock_irqsave(&b_dev_info->pages_lock, flags);
64 list_for_each_entry_safe(page, tmp, &b_dev_info->pages, lru) { 65 list_for_each_entry_safe(page, tmp, &b_dev_info->pages, lru) {
65 /* 66 /*
66 * Block others from accessing the 'page' while we get around 67 * Block others from accessing the 'page' while we get around
@@ -75,15 +76,14 @@ struct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info)
75 continue; 76 continue;
76 } 77 }
77#endif 78#endif
78 spin_lock_irqsave(&b_dev_info->pages_lock, flags);
79 balloon_page_delete(page); 79 balloon_page_delete(page);
80 __count_vm_event(BALLOON_DEFLATE); 80 __count_vm_event(BALLOON_DEFLATE);
81 spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
82 unlock_page(page); 81 unlock_page(page);
83 dequeued_page = true; 82 dequeued_page = true;
84 break; 83 break;
85 } 84 }
86 } 85 }
86 spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
87 87
88 if (!dequeued_page) { 88 if (!dequeued_page) {
89 /* 89 /*