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

Reply via email to