On 11/10/2025 7:16 PM, Dev Jain wrote:
> 
> On 10/11/25 5:02 pm, Shivank Garg wrote:
>> When MADV_COLLAPSE encounters dirty file-backed pages, it currently
>> returns -EINVAL, this is misleading as EINVAL suggests invalid arguments,
>> whereas dirty pages are a transient condition that may resolve on retry.
>>
>> Introduce SCAN_PAGE_DIRTY and map it to -EAGAIN. For khugepaged, this
>> is harmless as it will revisit the range after async writeback completes.
> 
> Taking a cursory look at enum scan_result, I am sure there are other error
> codes as well which redirect to -EINVAL when they actually should to something
> else...
> 
>>

>> @@ -1967,7 +1968,7 @@ static int collapse_file(struct mm_struct *mm, 
>> unsigned long addr,
>>                    */
>>                   xas_unlock_irq(&xas);
>>                   filemap_flush(mapping);
>> -                result = SCAN_FAIL;
>> +                result = SCAN_PAGE_DIRTY;
>>                   goto xa_unlocked;
>>               } else if (folio_test_writeback(folio)) {
>>                   xas_unlock_irq(&xas);
> 
> Now that you are at it, it would make sense to redirect this 
> folio_test_writeback()
> branch also to -EAGAIN, and call the common error code 
> SCAN_PAGE_UNDER_WRITEBACK.
>

Good point about the folio_test_writeback() case.
I think we can use a single error code "SCAN_PAGE_NOT_CLEAN" to cover both 
dirty and writeback states.

Thanks,
Shivank

Reply via email to