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;
> 

Reply via email to