Hi, Hillf, Hillf Danton <hillf...@alibaba-inc.com> writes:
> 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? OOPS, I should hold the tree lock for the error path too. Will update it in the next version. Thanks for pointing out this! Best Regards, Huang, Ying >> + page_ref_sub(page, nr); >> } >> >> return error; >>