Re: [PATCH v3 29/30] luo: allow preserving memfd
From: Pratyush Yadav <pratyush@kernel.org>
Date: 2025-08-13 12:44:13
Also in:
linux-doc, linux-fsdevel, linux-mm, lkml
From: Pratyush Yadav <pratyush@kernel.org>
Date: 2025-08-13 12:44:13
Also in:
linux-doc, linux-fsdevel, linux-mm, lkml
On Fri, Aug 08 2025, Pasha Tatashin wrote:
quoted
+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.
quoted
+ 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