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