* [PATCH 0/2] mm/gup: Cleanup memfd_pin_folios() @ 2025-04-30 1:00 Vishal Moola (Oracle) 2025-04-30 1:00 ` [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() Vishal Moola (Oracle) 2025-04-30 1:00 ` [PATCH 2/2] mm/gup: Remove page_folio() " Vishal Moola (Oracle) 0 siblings, 2 replies; 7+ messages in thread From: Vishal Moola (Oracle) @ 2025-04-30 1:00 UTC (permalink / raw) To: linux-mm Cc: linux-kernel, Vivek Kasireddy, Andrew Morton, Vishal Moola (Oracle) A couple straightforward cleanups to memfd_pin_folios() found through code inspection. Saves 124 bytes of kernel text overall and makes the code more readable. Vishal Moola (Oracle) (2): mm/gup: Remove unnecessary check in memfd_pin_folios() mm/gup: Remove page_folio() in memfd_pin_folios() mm/gup.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) -- 2.49.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() 2025-04-30 1:00 [PATCH 0/2] mm/gup: Cleanup memfd_pin_folios() Vishal Moola (Oracle) @ 2025-04-30 1:00 ` Vishal Moola (Oracle) 2025-04-30 21:48 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek 2025-04-30 1:00 ` [PATCH 2/2] mm/gup: Remove page_folio() " Vishal Moola (Oracle) 1 sibling, 2 replies; 7+ messages in thread From: Vishal Moola (Oracle) @ 2025-04-30 1:00 UTC (permalink / raw) To: linux-mm Cc: linux-kernel, Vivek Kasireddy, Andrew Morton, Vishal Moola (Oracle) Commit 89c1905d9c14 ("mm/gup: introduce memfd_pin_folios() for pinning memfd folios") checks if filemap_get_folios_contig() returned duplicate folios to prevent multiple attempts at pinning the same folio. Commit 8ab1b1602396 ("mm: fix filemap_get_folios_contig returning batches of identical folios") ensures that filemap_get_folios_contig() returns a batch of distinct folios. We can remove the duplicate folio check to simplify the code and save 58 bytes of text. Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> --- mm/gup.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index f32168339390..1fb8f3b9a493 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -3589,7 +3589,7 @@ long memfd_pin_folios(struct file *memfd, loff_t start, loff_t end, { unsigned int flags, nr_folios, nr_found; unsigned int i, pgshift = PAGE_SHIFT; - pgoff_t start_idx, end_idx, next_idx; + pgoff_t start_idx, end_idx; struct folio *folio = NULL; struct folio_batch fbatch; struct hstate *h; @@ -3639,19 +3639,7 @@ long memfd_pin_folios(struct file *memfd, loff_t start, loff_t end, folio = NULL; } - next_idx = 0; for (i = 0; i < nr_found; i++) { - /* - * As there can be multiple entries for a - * given folio in the batch returned by - * filemap_get_folios_contig(), the below - * check is to ensure that we pin and return a - * unique set of folios between start and end. - */ - if (next_idx && - next_idx != folio_index(fbatch.folios[i])) - continue; - folio = page_folio(&fbatch.folios[i]->page); if (try_grab_folio(folio, 1, FOLL_PIN)) { @@ -3664,7 +3652,6 @@ long memfd_pin_folios(struct file *memfd, loff_t start, loff_t end, *offset = offset_in_folio(folio, start); folios[nr_folios] = folio; - next_idx = folio_next_index(folio); if (++nr_folios == max_folios) break; } -- 2.49.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() 2025-04-30 1:00 ` [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() Vishal Moola (Oracle) @ 2025-04-30 21:48 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek 1 sibling, 0 replies; 7+ messages in thread From: David Hildenbrand @ 2025-04-30 21:48 UTC (permalink / raw) To: Vishal Moola (Oracle), linux-mm Cc: linux-kernel, Vivek Kasireddy, Andrew Morton On 30.04.25 03:00, Vishal Moola (Oracle) wrote: > Commit 89c1905d9c14 ("mm/gup: introduce memfd_pin_folios() for pinning memfd folios") > checks if filemap_get_folios_contig() returned duplicate folios to > prevent multiple attempts at pinning the same folio. > > Commit 8ab1b1602396 ("mm: fix filemap_get_folios_contig returning batches of identical folios") > ensures that filemap_get_folios_contig() returns a batch of distinct folios. > > We can remove the duplicate folio check to simplify the code and save > 58 bytes of text. > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> > --- Acked-by: David Hildenbrand <david@redhat.com> -- Cheers, David / dhildenb ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() 2025-04-30 1:00 ` [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() Vishal Moola (Oracle) 2025-04-30 21:48 ` David Hildenbrand @ 2025-05-01 21:23 ` Kasireddy, Vivek 1 sibling, 0 replies; 7+ messages in thread From: Kasireddy, Vivek @ 2025-05-01 21:23 UTC (permalink / raw) To: Vishal Moola (Oracle), linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Andrew Morton Hi Vishal, > Subject: [PATCH 1/2] mm/gup: Remove unnecessary check in > memfd_pin_folios() > > Commit 89c1905d9c14 ("mm/gup: introduce memfd_pin_folios() for pinning > memfd folios") > checks if filemap_get_folios_contig() returned duplicate folios to > prevent multiple attempts at pinning the same folio. > > Commit 8ab1b1602396 ("mm: fix filemap_get_folios_contig returning batches > of identical folios") > ensures that filemap_get_folios_contig() returns a batch of distinct folios. > > We can remove the duplicate folio check to simplify the code and save > 58 bytes of text. > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> > --- > mm/gup.c | 15 +-------------- > 1 file changed, 1 insertion(+), 14 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index f32168339390..1fb8f3b9a493 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -3589,7 +3589,7 @@ long memfd_pin_folios(struct file *memfd, loff_t > start, loff_t end, > { > unsigned int flags, nr_folios, nr_found; > unsigned int i, pgshift = PAGE_SHIFT; > - pgoff_t start_idx, end_idx, next_idx; > + pgoff_t start_idx, end_idx; > struct folio *folio = NULL; > struct folio_batch fbatch; > struct hstate *h; > @@ -3639,19 +3639,7 @@ long memfd_pin_folios(struct file *memfd, loff_t > start, loff_t end, > folio = NULL; > } > > - next_idx = 0; > for (i = 0; i < nr_found; i++) { > - /* > - * As there can be multiple entries for a > - * given folio in the batch returned by > - * filemap_get_folios_contig(), the below > - * check is to ensure that we pin and return a > - * unique set of folios between start and end. > - */ > - if (next_idx && > - next_idx != folio_index(fbatch.folios[i])) > - continue; At that time, I believed that filemap_get_folios_contig() returning duplicate folios was by design and not a result of a bug and hence added this workaround, which is no longer needed in light of your fix. Anyway, LGTM. Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Thanks, Vivek > - > folio = page_folio(&fbatch.folios[i]->page); > > if (try_grab_folio(folio, 1, FOLL_PIN)) { > @@ -3664,7 +3652,6 @@ long memfd_pin_folios(struct file *memfd, loff_t > start, loff_t end, > *offset = offset_in_folio(folio, start); > > folios[nr_folios] = folio; > - next_idx = folio_next_index(folio); > if (++nr_folios == max_folios) > break; > } > -- > 2.49.0 > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] mm/gup: Remove page_folio() in memfd_pin_folios() 2025-04-30 1:00 [PATCH 0/2] mm/gup: Cleanup memfd_pin_folios() Vishal Moola (Oracle) 2025-04-30 1:00 ` [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() Vishal Moola (Oracle) @ 2025-04-30 1:00 ` Vishal Moola (Oracle) 2025-04-30 21:49 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek 1 sibling, 2 replies; 7+ messages in thread From: Vishal Moola (Oracle) @ 2025-04-30 1:00 UTC (permalink / raw) To: linux-mm Cc: linux-kernel, Vivek Kasireddy, Andrew Morton, Vishal Moola (Oracle) We can get the folio directly from the folio batch, so remove the unnecessary page_folio() call. Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> --- mm/gup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/gup.c b/mm/gup.c index 1fb8f3b9a493..795fd94f379d 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -3640,7 +3640,7 @@ long memfd_pin_folios(struct file *memfd, loff_t start, loff_t end, } for (i = 0; i < nr_found; i++) { - folio = page_folio(&fbatch.folios[i]->page); + folio = fbatch.folios[i]; if (try_grab_folio(folio, 1, FOLL_PIN)) { folio_batch_release(&fbatch); -- 2.49.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm/gup: Remove page_folio() in memfd_pin_folios() 2025-04-30 1:00 ` [PATCH 2/2] mm/gup: Remove page_folio() " Vishal Moola (Oracle) @ 2025-04-30 21:49 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek 1 sibling, 0 replies; 7+ messages in thread From: David Hildenbrand @ 2025-04-30 21:49 UTC (permalink / raw) To: Vishal Moola (Oracle), linux-mm Cc: linux-kernel, Vivek Kasireddy, Andrew Morton On 30.04.25 03:00, Vishal Moola (Oracle) wrote: > We can get the folio directly from the folio batch, so remove the > unnecessary page_folio() call. > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> > --- > mm/gup.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/gup.c b/mm/gup.c > index 1fb8f3b9a493..795fd94f379d 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -3640,7 +3640,7 @@ long memfd_pin_folios(struct file *memfd, loff_t start, loff_t end, > } > > for (i = 0; i < nr_found; i++) { > - folio = page_folio(&fbatch.folios[i]->page); > + folio = fbatch.folios[i]; > > if (try_grab_folio(folio, 1, FOLL_PIN)) { > folio_batch_release(&fbatch); Acked-by: David Hildenbrand <david@redhat.com> -- Cheers, David / dhildenb ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH 2/2] mm/gup: Remove page_folio() in memfd_pin_folios() 2025-04-30 1:00 ` [PATCH 2/2] mm/gup: Remove page_folio() " Vishal Moola (Oracle) 2025-04-30 21:49 ` David Hildenbrand @ 2025-05-01 21:23 ` Kasireddy, Vivek 1 sibling, 0 replies; 7+ messages in thread From: Kasireddy, Vivek @ 2025-05-01 21:23 UTC (permalink / raw) To: Vishal Moola (Oracle), linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Andrew Morton Hi Vishal, > Subject: [PATCH 2/2] mm/gup: Remove page_folio() in memfd_pin_folios() > > We can get the folio directly from the folio batch, so remove the > unnecessary page_folio() call. > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> > --- > mm/gup.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/gup.c b/mm/gup.c > index 1fb8f3b9a493..795fd94f379d 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -3640,7 +3640,7 @@ long memfd_pin_folios(struct file *memfd, loff_t > start, loff_t end, > } > > for (i = 0; i < nr_found; i++) { > - folio = page_folio(&fbatch.folios[i]->page); > + folio = fbatch.folios[i]; I don't recall why I chose to extract the folio in a roundabout way. LGTM. Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Thanks, Vivek > > if (try_grab_folio(folio, 1, FOLL_PIN)) { > folio_batch_release(&fbatch); > -- > 2.49.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-05-01 21:23 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-04-30 1:00 [PATCH 0/2] mm/gup: Cleanup memfd_pin_folios() Vishal Moola (Oracle) 2025-04-30 1:00 ` [PATCH 1/2] mm/gup: Remove unnecessary check in memfd_pin_folios() Vishal Moola (Oracle) 2025-04-30 21:48 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek 2025-04-30 1:00 ` [PATCH 2/2] mm/gup: Remove page_folio() " Vishal Moola (Oracle) 2025-04-30 21:49 ` David Hildenbrand 2025-05-01 21:23 ` Kasireddy, Vivek
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).