Re: [PATCH v2] mm: alloc_pages_bulk: remove assumption of populating only NULL elements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 06 Mar 2025, Yunsheng Lin wrote:
> On 2025/3/6 7:41, NeilBrown wrote:
> > On Wed, 05 Mar 2025, Yunsheng Lin wrote:
> >>
> >> For the existing btrfs and sunrpc case, I am agreed that there
> >> might be valid use cases too, we just need to discuss how to
> >> meet the requirements of different use cases using simpler, more
> >> unified and effective APIs.
> > 
> > We don't need "more unified".
> 
> What I meant about 'more unified' is how to avoid duplicated code as
> much as possible for two different interfaces with similar‌ functionality.
> 
> The best way I tried to avoid duplicated code as much as possible is
> to defragment the page_array before calling the alloc_pages_bulk()
> for the use case of btrfs and sunrpc so that alloc_pages_bulk() can
> be removed of the assumption populating only NULL elements, so that
> the API is simpler and more efficient.
> 
> > 
> > If there are genuinely two different use cases with clearly different
> > needs - even if only slightly different - then it is acceptable to have
> > two different interfaces.  Be sure to choose names which emphasise the
> > differences.
> 
> The best name I can come up with for the use case of btrfs and sunrpc
> is something like alloc_pages_bulk_refill(), any better suggestion about
> the naming?

I think alloc_pages_bulk_refill() is a good name.

So:
- alloc_pages_bulk() would be given an uninitialised array of page
  pointers and a required count and would return the number of pages
  that were allocated
- alloc_pages_bulk_refill() would be given an initialised array of page
  pointers some of which might be NULL.  It would attempt to allocate
  pages for the non-NULL pointers and return the total number of
  allocated pages in the array - just like the current
  alloc_pages_bulk().

sunrpc could usefully use both of these interfaces.

alloc_pages_bulk() could be implemented by initialising the array and
then calling alloc_pages_bulk_refill().  Or alloc_pages_bulk_refill()
could be implemented by compacting the pages and then calling
alloc_pages_bulk().
If we could duplicate the code and have two similar but different
functions.

The documentation for _refill() should make it clear that the pages
might get re-ordered.

Having looked at some of the callers I agree that the current interface
is not ideal for many of them, and that providing a simpler interface
would help.

Thanks,
NeilBrown




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux