>> @@ -1175,6 +1258,8 @@ static void free_heap_pages(
>> if ( page_state_is(&pg[i], offlined) )
>> tainted = 1;
>>
>> +pg[i].u.free.scrub_state = 0;
> Is this really needed for every page in the buddy?
>
The concern here is that is we break the buddy (in alloc_heap
>>> On 19.05.17 at 17:50, wrote:
> @@ -1090,24 +1131,51 @@ bool scrub_free_pages(void)
> do {
> while ( !page_list_empty(&heap(node, zone, order)) )
> {
> -unsigned int i;
> +unsigned int i, dirty_cnt;
> +struct scr
Instead of scrubbing pages while holding heap lock we can mark
buddy's head as being scrubbed and drop the lock temporarily.
If someone (most likely alloc_heap_pages()) tries to access
this chunk it will signal the scrubber to abort scrub by setting
head's PAGE_SCRUB_ABORT bit. The scrubber checks