linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "NeilBrown" <neilb@suse.de>
To: "Chuck Lever III" <chuck.lever@oracle.com>,
	"Mel Gorman" <mgorman@suse.com>,
Cc: "Mike Javorski" <mike.javorski@gmail.com>,
	"Linux NFS Mailing List" <linux-nfs@vger.kernel.org>,
	linux-mm@kvack.org
Subject: [PATCH] MM: clarify effort used in alloc_pages_bulk_*()
Date: Mon, 30 Aug 2021 08:28:15 +1000	[thread overview]
Message-ID: <163027609524.7591.4987241695872857175@noble.neil.brown.name> (raw)
In-Reply-To: <12B831AA-4A4E-4102-ADA3-97B6FA0B119E@oracle.com>


The alloc_pages_bulk_*() interfaces do not make it clear what degree
of success can be expected.

The code appears to allocate at least one page with the same effort as
alloc_page() when used with the same GFP flags, and then to allocate any
more only opportunistically.  So a caller should not *expect* to get a
full allocation, but should not be *surprised* by one either.

Add text to the comment clarifying this.

Also fix a bug.  When alloc_pages_bulk_array() is called on an array
that is partially allocated, the level of effort to get a single page is
less than when the array was completely unallocated.  This behaviour is
inconsistent, but now fixed.

Fixes: 0f87d9d30f21 ("mm/page_alloc: add an array-based interface to the bulk page allocator")
Signed-off-by: NeilBrown <neilb@suse.de>
---
 mm/page_alloc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index eeb3a9cb36bb..083316c45964 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5206,6 +5206,11 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order,
  * is the maximum number of pages that will be stored in the array.
  *
  * Returns the number of pages on the list or array.
+ *
+ * At least one page will be allocated if that is possible while
+ * remaining consistent with @gfp.  Extra pages up to the requested
+ * total will be allocated opportunistically when doing so is
+ * significantly cheaper than having the caller repeat the request.
  */
 unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 			nodemask_t *nodemask, int nr_pages,
@@ -5307,7 +5312,7 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 								pcp, pcp_list);
 		if (unlikely(!page)) {
 			/* Try and get at least one page */
-			if (!nr_populated)
+			if (!nr_account)
 				goto failed_irq;
 			break;
 		}
-- 
2.32.0



       reply	other threads:[~2021-08-29 22:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAOv1SKCmdtchm5Z2NU80o49tkrHpAkPFaHKj4-vLDN5bZNCz-Q@mail.gmail.com>
     [not found] ` <162846730406.22632.14734595494457390936@noble.neil.brown.name>
     [not found]   ` <CAOv1SKBZ7sGBnvG9-M+De+s=CfU=H_GBs4hJah1E4ks+NSMyPw@mail.gmail.com>
     [not found]     ` <CAOv1SKCUM5cGuXWAc7dsXtbmPMATqd245juC+S9gVXHWiZsvmQ@mail.gmail.com>
     [not found]       ` <162855893202.12431.3423894387218130632@noble.neil.brown.name>
     [not found]         ` <CAOv1SKAaSbfw53LWCCrvGCHESgdtCf5h275Zkzi9_uHkqnCrdg@mail.gmail.com>
     [not found]           ` <162882238416.1695.4958036322575947783@noble.neil.brown.name>
     [not found]             ` <CAOv1SKB_dsam7P9pzzh_SKCtA8uE9cyFdJ=qquEfhLT42-szPA@mail.gmail.com>
     [not found]               ` <CAOv1SKDDOj5UeUwztrMSNJnLgSoEgD8OU55hqtLHffHvaCQzzA@mail.gmail.com>
     [not found]                 ` <162907681945.1695.10796003189432247877@noble.neil.brown.name>
     [not found]                   ` <87777C39-BDDA-4E1E-83FA-5B46918A66D3@oracle.com>
     [not found]                     ` <CAOv1SKA5ByO7PYQwvd6iBcPieWxEp=BfUZuigJ=7Hm4HAmTuMA@mail.gmail.com>
     [not found]                       ` <162915491276.9892.7049267765583701172@noble.neil.brown.name>
     [not found]                         ` <162941948235.9892.6790956894845282568@noble.neil.brown.name>
     [not found]                           ` <CAOv1SKAyr0Cixc8eQf8-Fdnf=9Db_xZGsweq9K2E5AkALFqavQ@mail.gmail.com>
     [not found]                             ` <CAOv1SKDDUFpgexZ_xYCe6c2-UCBK0+vicoG+LAtG2Zhispd_jg@mail.gmail.com>
     [not found]                               ` <162960371884.9892.13803244995043191094@noble.neil.brown.name>
     [not found]                                 ` <CAOv1SKBePD6N-R0uETgcSPA-LZZ4895ZJDKTY7mYvhfu184OQQ@mail.gmail.com>
     [not found]                                   ` <162966962721.9892.5962616727949224286@noble.neil.brown.name>
     [not found]                                     ` <CAOv1SKB6xqyduf5L5hcXOe-xMN-UJOfFeE5eXVga3TviKuH0PA@mail.gmail.com>
     [not found]                                       ` <163001427749.7591.7281634750945934559@noble.neil.brown.name>
     [not found]                                         ` <CAOv1SKC+3LXhM+L9MwU2D03bpeof55-g+i=r3SWEjVWcPVCi8Q@mail.gmail.com>
     [not found]                                           ` <163004202961.7591.12633163545286005205@noble.neil.brown.name>
     [not found]                                             ` <CAOv1SKDTcg5WDp5zf3ZGL0enJ7K693W-9TMYKcrgweyzp6Qjhg@mail.gmail.com>
     [not found]                                               ` <163004848514.7591.2757618782251492498@noble.neil.brown.name>
     [not found]                                                 ` <6CC9C852-CEE3-4657-86AD-9D5759E2BE1C@oracle.com>
     [not found]                                                   ` <CAOv1SKAiPB62sQcnDCKC5vYbbmakfbe80KRu3JEVZVO7Trk8cw@mail.gmail.com>
     [not found]                                                     ` <CAOv1SKATk1iP=J9r2x0CQzNuwq2VoRvN8Mkba3DsKq6W_tfrDQ@mail.gmail.com>
     [not found]                                                       ` <416268C9-BEAC-483C-9392-8139340BC849@oracle.com>
     [not found]                                                         ` <CAOv1SKCjvgSfUoFtufZ5-dB-quG=djnn-UHO286S410aVxrV0Q@mail.gmail.com>
     [not found]                                                           ` <12B831AA-4A4E-4102-ADA3-97B6FA0B119E@oracle.com>
2021-08-29 22:28                                                             ` NeilBrown [this message]
2021-08-30  9:11                                                               ` Mel Gorman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=163027609524.7591.4987241695872857175@noble.neil.brown.name \
    --to=neilb@suse.de \
    --cc=chuck.lever@oracle.com \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=mgorman@suse.com \
    --cc=mike.javorski@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox