From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD9AFC10F1A for ; Thu, 9 May 2024 08:57:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6A8326B0089; Thu, 9 May 2024 04:57:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 662306B008C; Thu, 9 May 2024 04:57:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4F7E36B0092; Thu, 9 May 2024 04:57:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 2F6ED6B0089 for ; Thu, 9 May 2024 04:57:17 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id A93B71C19A2 for ; Thu, 9 May 2024 08:57:16 +0000 (UTC) X-FDA: 82098253272.09.C7A8D62 Received: from mail-ua1-f51.google.com (mail-ua1-f51.google.com [209.85.222.51]) by imf02.hostedemail.com (Postfix) with ESMTP id DF3CB8000E for ; Thu, 9 May 2024 08:57:13 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=M5dZWvXy; spf=pass (imf02.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.51 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715245033; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hfKhm+2hvPQl8Oso+dQHqxM5T+rG2L/B/sQ5bPGSyGY=; b=C4ca/t4W2l1uDV5sQBtVv3jzXcgrSSNSuQAZjjG04tBwQHL6qm+CWSbq1TFbxA902Cxiw5 QU0P/D0Tw8V07aNAonQp2JSqAO/M5V/P2XGVbYzd4k4cSvbOAYnw1jglk8Lse+kOGY+2xr vUBXDWcPn6W4dOkxIn+HgXV00jJvqQw= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=M5dZWvXy; spf=pass (imf02.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.51 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715245033; a=rsa-sha256; cv=none; b=wpGh0HaiZqOfb//p1h+Gz5mdkHqg8JX+2/IeIZGLVXR5kvnqJiSlEFcF0RGOkEppvlZMDM iFmcBgLWLdcYUxjGUKNelOWA+Z2B3iE8pF4AC13bolBl9dVtXme9wwvdegIgPOftSHdOSE sI66VEUlGyVOT50Ph/62mXjTEJXNI3I= Received: by mail-ua1-f51.google.com with SMTP id a1e0cc1a2514c-7efcdc89872so213220241.3 for ; Thu, 09 May 2024 01:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715245033; x=1715849833; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hfKhm+2hvPQl8Oso+dQHqxM5T+rG2L/B/sQ5bPGSyGY=; b=M5dZWvXyoT1RzH6q4snZYG+cMZl+c3QKBde4D02kaR+idGHcmMfsrVc18PSEUSSWt3 5HVkUQWzpJ3/4Dqnx7v4vf50IKaGEVCCyg79+2QrOj0OhaD3eT4hTLC0UhJhclqQxvCd Q7pvNNWD9ZZ+VLjeIi9J9spBFHP4tqgHSgjqSq/zl/fl+OzwRgTKTyXIIrsJEKKn193g VIdpOfiE61eto7YHPunHjzbOMka4zL14Rq9WSZE80p923OjYjJOEgWGhSi+YZkRTLwsn jRicY+qZOeL4bRLUlP1cdGIdINv8Bzy3EpQK54PuFXYbAIhQAbnQapl3ahd2BTN+YdhH 4pWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715245033; x=1715849833; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hfKhm+2hvPQl8Oso+dQHqxM5T+rG2L/B/sQ5bPGSyGY=; b=AlrCFqy0FTSEjKanTDwcoEzrdoiH8nVISbcOqJqGEzQEV9poQC4fKeC6OEYXy7qnBA rj+ZNtpwmK67TL9D7030MI/RmgesDUQbY/kDzuS9rXh7XbsYWrgqovNz5zIZ/FkobWXM KP9f6q5kdFmzsj++2bdkoGUlouCBhwAM8Bi56KkBwYqrLDLiAhC9fZ0VhSRvHf6UigzE b31TgSYkeVmUsYzFbxaWNlDMliVhMxCXSPqCOzkipBaJ/nCIyyqwQSrfrjWlNVKUdyrT vhr/HBd7gxg4VKMMWQk855RGmisTz6Ucw+dk7MkJSkWJFF6Sd1YZ0MuK4Q7nt+oPlN1g 60rQ== X-Forwarded-Encrypted: i=1; AJvYcCVgdGHKvBJlXRF2hQ44ga4dsHyaPUtf9eiEQmX0IibHBNsGg+Bjhg5IjXGDeh7amM9WY05vJNxNlgxEGdGxjrjTEGo= X-Gm-Message-State: AOJu0Yz/w0yGpKpjF4ml+SWSQlN6KK9GYEMpjlM7oc8sTcXP+wiHKL1Q GOoXkj5TZ3Y/MCoFhVT+6uUKPwhBYuZOZt0aHk3S5HKTTSihw7bsPeT+9/jIhCKEz1Cunhjxkv5 62JWADVCLS90p2EJzy9yNQKhOh5g= X-Google-Smtp-Source: AGHT+IFYUDF9N+GGbD4pPAwt0Qso0dyrFmiNKcjQMb09BOpKvCTUFL9zPSEJaYJ38fr6aytRinvJmqD7kfFiAp1NNPg= X-Received: by 2002:a05:6102:345:b0:47e:f593:2b8a with SMTP id ada2fe7eead31-47f3c38ff83mr4773563137.24.1715245032831; Thu, 09 May 2024 01:57:12 -0700 (PDT) MIME-Version: 1.0 References: <20240508125808.28882-1-hailong.liu@oppo.com> <20240509080636.bauxbgpqdluzpein@oppo.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Thu, 9 May 2024 20:57:00 +1200 Message-ID: Subject: Re: [RFC PATCH] mm/vmalloc: fix vmalloc which may return null if called with __GFP_NOFAIL To: Hailong Liu Cc: Michal Hocko , akpm@linux-foundation.org, urezki@gmail.com, hch@infradead.org, lstoakes@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, xiang@kernel.org, chao@kernel.org, Oven Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: DF3CB8000E X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: xqpn4ysx7mxca511yds3yqe8sbaf1hy5 X-HE-Tag: 1715245033-787919 X-HE-Meta: U2FsdGVkX1+rLLMkT9L560bwmrfHulYbjOpy6UgmXxFyWun28BKCfMFdTJyPFFB3Fy6PnwSbhnmOwwZZ+PtePgJ2iVFOonkG96vRaJJmZeVxriZAtf6DxcC+KSrZAuH23D3acfwwZ3ogDzYrlgIeLcRQKrRhKfOlA7whYyWR7Lh1iZJ8h39N6ZQqugPP9YjzjNIbwAmXTmE9xwVemVkpA4lgnUgtrToTbXQt1vdKd22mPG6yjG9zZmKAC0gJH48BesaaynnQP3CeK1Wo3sYgGMijK56BKIM2zI4SADwKDHXRQYxpVUUIawtekYY6RjTX/YT4aqG5z/QAlFgZKdWDVWWxeMOwtAxhpn0R+Hk1rh9XBfUqzqjPCebMNpzwzQf8L0fRbkZOsfzt1Zv6q/pBbS8Du+7Lbp2Dbb3JltvFZunszzVC60xtLiKDVoxj46icO5UL4gTXop/7p6Ds3SpH5oLB9tU3WhkAImENDOsZVZ2vuGwrSgiZpmBgTlix3us1+1fTaK1eh3D4IVuQ4xNKem5eikI+XV0VpCMnRzF8Qz78mF6c8jSZ+/0BciyjWQFwI9ZGTQ0I3mrPwaen6GokCr47yU/CGTm4MsNuwAnOQmXXUK8fGUX3FHJ3E2t/7AEKwD3xjQNVLdUl6eTlKdzqa2V0zxyXxQf/sVek5NfKSQzVqc/dwig93RdnHlwfuPLM8zW3I+8T3Zf10vK8CLlHyuI8VBuKOzwEEyZKlH4uBgvLLnkQkPpPU02bfdmUOPbvcXqA7Mo72pNjoAQuPXfvJxIfZwst7+QsD0ra5rjaTz76A3kNUy+SJdjXlOT+YiKdJQdFTDxPjhHmGQhqi5oRIBgAFRYaU0I+in5vgHnf9nEJ2WA7XDt6ULDbEOC+gdHMO/1phxT6MKN5BE4lNhTYNpEBDCOi7pDCqXXrQIQEzUOApoaKpb6gbYC7OKzzlJtc5Ld/m8Jy6WpC6ZgVFTy Wigs9N+y ae3PjQ6RO9nzKNDwZcTA9TWJ9HFhZCEruLr1ruCjyjhP11dFdoMyDcAsKXZBRZ5qdCjrjEtW7pcB/09txvjQ0ehOtc2AbhRaSwkJHav5UqVPcXGweiEdfHFhhO2MljX1iXx4Ty8Tcptt7eighZ62CudSe+6MKehtG/FG3YcBbAp/GQtm0Kdnh08PfT9QgdVODHk1YIuf98WgPeUprlh58qjwYlhw35qxrQ5jOyehl/Of7dBmnDibMeeOFweFKSIAU067Uno+01wyOjFCH7Hg4OME0r98q7UrSMBzR0yOJNOSTka8HuTFMMClQmKooh3lB8BQDQ1fQKTxQNIowmFNQpq0rzN5KjEkjzvsU7TSx+qWi2ovqX95MnvYjtHSI7fZY9+auHJ2bdcWihwrbNbrE6B18aKhc0UCwJx+7V4WyGXYOFVlkFJ4VhU8RlcFHOjcVQM5VwnB9OItvOBJ/yCH4sxwZKxnlFx+JoirDHdF130S4mvDfOPpqK7aQKtewpmgOXjTILK2MnYwPDEKwd+Hhs4UURfFe482pdHAT X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, May 9, 2024 at 8:32=E2=80=AFPM Barry Song <21cnbao@gmail.com> wrote= : > > On Thu, May 9, 2024 at 8:21=E2=80=AFPM Hailong Liu = wrote: > > > > On Thu, 09. May 09:48, Michal Hocko wrote: > > > On Wed 08-05-24 20:58:08, hailong.liu@oppo.com wrote: > > > > From: "Hailong.Liu" > > > > > > > > Commit a421ef303008 ("mm: allow !GFP_KERNEL allocations for kvmallo= c") > > > > includes support for __GFP_NOFAIL, but it presents a conflict with > > > > commit dd544141b9eb ("vmalloc: back off when the current task is > > > > OOM-killed"). A possible scenario is as belows: > > > > > > > > process-a > > > > kvcalloc(n, m, GFP_KERNEL | __GFP_NOFAIL) > > > > __vmalloc_node_range() > > > > __vmalloc_area_node() > > > > vm_area_alloc_pages() > > > > --> oom-killer send SIGKILL to process-a > > > > if (fatal_signal_pending(current)) break; > > > > --> return NULL; > > > > > > > > to fix this, do not check fatal_signal_pending() in vm_area_alloc_p= ages() > > > > if __GFP_NOFAIL set. > > > > > > > > Reported-by: Oven > > > > Signed-off-by: Hailong.Liu > > > > --- > > > > mm/vmalloc.c | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > > > > index 6641be0ca80b..2f359d08bf8d 100644 > > > > --- a/mm/vmalloc.c > > > > +++ b/mm/vmalloc.c > > > > @@ -3560,7 +3560,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid, > > > > > > > > /* High-order pages or fallback path if "bulk" fails. */ > > > > while (nr_allocated < nr_pages) { > > > > - if (fatal_signal_pending(current)) > > > > + if (!(gfp & __GFP_NOFAIL) && fatal_signal_pending(curre= nt)) > > > > > > Use nofail instead of gfp & __GFP_NOFAIL. > > > > > > Other than that looks good to me. After that is fixed, please feel fr= ee > > > to add Acked-by: Michal Hocko > > > > > > I believe this should also have Fixes: 9376130c390a ("mm/vmalloc: add= support for __GFP_NOFAIL") > > > -- > > > Michal Hocko > > > SUSE Labs > > > > Thanks for the review and the Ack! > > > > Add Fixes in V2 patch. > > > > IIUC, nofail could not used for this case. > > > > /* > > * For order-0 pages we make use of bulk allocator, if > > * the page array is partly or not at all populated due > > * to fails, fallback to a single page allocator that is > > * more permissive. > > */ > > if (!order) { > > /* bulk allocator doesn't support nofail req. officiall= y */ > > xxx > > -> nofail =3D false; > > isn't it another bug that needs a fix? Upon further examination, it's not a bug, but we can still utilize 'nofail'= . The current code is very hard to read about gfp and "nofail" :-) maybe: diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 6641be0ca80b..7c66fe16c2ad 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3498,7 +3498,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid, { unsigned int nr_allocated =3D 0; gfp_t alloc_gfp =3D gfp; - bool nofail =3D false; + bool nofail =3D !!(gfp & __GFP_NOFAIL); struct page *page; int i; @@ -3555,7 +3555,6 @@ vm_area_alloc_pages(gfp_t gfp, int nid, * and compaction etc. */ alloc_gfp &=3D ~__GFP_NOFAIL; - nofail =3D true; } /* High-order pages or fallback path if "bulk" fails. */ > > > } else if (gfp & __GFP_NOFAIL) { > > /* > > * Higher order nofail allocations are really expensive= and > > * potentially dangerous (pre-mature OOM, disruptive re= claim > > * and compaction etc. > > */ > > alloc_gfp &=3D ~__GFP_NOFAIL; > > nofail =3D true; > > } > > > > /* High-order pages or fallback path if "bulk" fails. */ > > while (nr_allocated < nr_pages) { > > > > -> nofail is false here if bulk allocator fails. > > if (fatal_signal_pending(current)) > > break; > > > > -- > > > > Best Regards, > > Hailong.