diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/balloon_compaction.c | 4 |
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 | /* |