@@ -691,7 +691,6 @@ static int vmballoon_alloc_page_list(struct vmballoon *b,
691
691
}
692
692
693
693
if (page ) {
694
- vmballoon_mark_page_offline (page , ctl -> page_size );
695
694
/* Success. Add the page to the list and continue. */
696
695
list_add (& page -> lru , & ctl -> pages );
697
696
continue ;
@@ -930,7 +929,6 @@ static void vmballoon_release_page_list(struct list_head *page_list,
930
929
931
930
list_for_each_entry_safe (page , tmp , page_list , lru ) {
932
931
list_del (& page -> lru );
933
- vmballoon_mark_page_online (page , page_size );
934
932
__free_pages (page , vmballoon_page_order (page_size ));
935
933
}
936
934
@@ -1005,6 +1003,7 @@ static void vmballoon_enqueue_page_list(struct vmballoon *b,
1005
1003
enum vmballoon_page_size_type page_size )
1006
1004
{
1007
1005
unsigned long flags ;
1006
+ struct page * page ;
1008
1007
1009
1008
if (page_size == VMW_BALLOON_4K_PAGE ) {
1010
1009
balloon_page_list_enqueue (& b -> b_dev_info , pages );
@@ -1014,6 +1013,11 @@ static void vmballoon_enqueue_page_list(struct vmballoon *b,
1014
1013
* for the balloon compaction mechanism.
1015
1014
*/
1016
1015
spin_lock_irqsave (& b -> b_dev_info .pages_lock , flags );
1016
+
1017
+ list_for_each_entry (page , pages , lru ) {
1018
+ vmballoon_mark_page_offline (page , VMW_BALLOON_2M_PAGE );
1019
+ }
1020
+
1017
1021
list_splice_init (pages , & b -> huge_pages );
1018
1022
__count_vm_events (BALLOON_INFLATE , * n_pages *
1019
1023
vmballoon_page_in_frames (VMW_BALLOON_2M_PAGE ));
@@ -1056,6 +1060,8 @@ static void vmballoon_dequeue_page_list(struct vmballoon *b,
1056
1060
/* 2MB pages */
1057
1061
spin_lock_irqsave (& b -> b_dev_info .pages_lock , flags );
1058
1062
list_for_each_entry_safe (page , tmp , & b -> huge_pages , lru ) {
1063
+ vmballoon_mark_page_online (page , VMW_BALLOON_2M_PAGE );
1064
+
1059
1065
list_move (& page -> lru , pages );
1060
1066
if (++ i == n_req_pages )
1061
1067
break ;
0 commit comments