Re: [PATCH v3 29/30] luo: allow preserving memfd
From: Pratyush Yadav
Date: Wed Aug 13 2025 - 08:44:34 EST
On Fri, Aug 08 2025, Pasha Tatashin wrote:
>> +static int memfd_luo_preserve_folios(struct memfd_luo_preserved_folio *pfolios,
>> + struct folio **folios,
>> + unsigned int nr_folios)
>> +{
>> + unsigned int i;
>
> Should be 'long i'
>
> Otherwise in err_unpreserve we get into an infinite loop. Thank you
> Josh Hilke for noticing this.
Good catch! Will fix.
>
>> + int err;
>> +
>> + for (i = 0; i < nr_folios; i++) {
>> + struct memfd_luo_preserved_folio *pfolio = &pfolios[i];
>> + struct folio *folio = folios[i];
>> + unsigned int flags = 0;
>> + unsigned long pfn;
>> +
>> + err = kho_preserve_folio(folio);
>> + if (err)
>> + goto err_unpreserve;
>> +
>> + pfn = folio_pfn(folio);
>> + if (folio_test_dirty(folio))
>> + flags |= PRESERVED_FLAG_DIRTY;
>> + if (folio_test_uptodate(folio))
>> + flags |= PRESERVED_FLAG_UPTODATE;
>> +
>> + pfolio->foliodesc = PRESERVED_FOLIO_MKDESC(pfn, flags);
>> + pfolio->index = folio->index;
>> + }
>> +
>> + return 0;
>> +
>> +err_unpreserve:
>> + i--;
>> + for (; i >= 0; i--)
>> + WARN_ON_ONCE(kho_unpreserve_folio(folios[i]));
>> + return err;
>> +}
>> +
--
Regards,
Pratyush Yadav