On Friday, October 28, 2016 1:56 PM Huang, Ying wrote: > > @@ -109,9 +118,16 @@ int __add_to_swap_cache(struct page *page, swp_entry_t > entry) > * So add_to_swap_cache() doesn't returns -EEXIST. > */ > VM_BUG_ON(error == -EEXIST); > - set_page_private(page, 0UL); > ClearPageSwapCache(page); > - put_page(page); > + set_page_private(cur_page, 0UL); > + while (i--) { > + cur_page--; > + cur_entry.val--; > + set_page_private(cur_page, 0UL); > + radix_tree_delete(&address_space->page_tree, > + swp_offset(cur_entry)); > + }
Pull pages out of radix tree with tree lock held? > + page_ref_sub(page, nr); > } > > return error; >