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 2BAEFC433FE for ; Fri, 4 Mar 2022 16:50:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7EB058D0002; Fri, 4 Mar 2022 11:50:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 79A688D0001; Fri, 4 Mar 2022 11:50:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 662228D0002; Fri, 4 Mar 2022 11:50:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0169.hostedemail.com [216.40.44.169]) by kanga.kvack.org (Postfix) with ESMTP id 533B38D0001 for ; Fri, 4 Mar 2022 11:50:16 -0500 (EST) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 051C8181C223A for ; Fri, 4 Mar 2022 16:50:16 +0000 (UTC) X-FDA: 79207291632.27.160DEA5 Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com [209.85.219.174]) by imf02.hostedemail.com (Postfix) with ESMTP id 8650E80024 for ; Fri, 4 Mar 2022 16:50:15 +0000 (UTC) Received: by mail-yb1-f174.google.com with SMTP id w16so17976961ybi.12 for ; Fri, 04 Mar 2022 08:50:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=87HcgX5krbNKK727vBqyS9uN6dtf5rxlszdjfz9xwn8=; b=LpExxzmSWtzN9qF7NCuj4vu9c5OBuvYrdpkPSi12GIjwIm3S98rFFacBT/vE52Xoiq QHmbkE+qvGhG0LDXUxNKhXX6ufdGW/bxaxeVGyv0TbeHFhLiJITdt5N/qliN2Q3eX3HH cVMezKrKyLIxiTMjKsXKPmWeOTeIw7u29TREx/qWsJ16QtSL0+b14H5NQzvgJ8p7+Lbp 02ABtrn8S+MoM516p5cAySMcnkhHqmJbpv6JM9YrmUPg/TiZQGzRplsjWn9e6MO/xR2B YzoIa75ynkpoENc5U/ya1JJUqd3LBCG4UPwAhkL58jShJuTA9m+HPtttZS1e1DkvNedL i0Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=87HcgX5krbNKK727vBqyS9uN6dtf5rxlszdjfz9xwn8=; b=XWC04Q4MqGYYFPI7HMFkB8XbJQnV0p2yqxoBBHDLT898Uyf9UFT2gI3bd6ejYxh4V9 lNihJ2YzLRrLrv0RxIONYBRAYurX0K7CvLLCv5X3zGCUuY9lwvnyGOo5nX8ILJfqGDA9 5+JHGkSwjW31/qvGk2d4EDvm7lxj74ZDJwGhuOOZ4SBH11wwpHHNw53lkSqu86LBv/j+ adFp7vdljm6cOfcqvmASGu/Ddm0OgD3+h5wwoFJN7ViiP+l9EFlOngfMoV4S+MrBYkqH AuwMCFXvJ023VzvcphbGSYb/xcXCcaIin4CwiaqifkQ8uGAsiWonVO8CQ0UNlFnce5PM Gpdg== X-Gm-Message-State: AOAM5330e4aYs4M3vIeKK71rf4BLBgvZjonpsjLUGFsnuXGOhQKOocyJ kbT7vf0X7lG/KR2JdDJiYDplKrW8lVfe9g8hzV9VeA== X-Google-Smtp-Source: ABdhPJx6wbk02EeTE0O/O579xvp0pc0DRV+wS1ymdclyb4UZsckZz5/mcc5j2+MLjmrJiHmD0fz3WXhy3YnicpnzzWE= X-Received: by 2002:a25:d188:0:b0:628:ba86:ee68 with SMTP id i130-20020a25d188000000b00628ba86ee68mr10111227ybg.427.1646412614327; Fri, 04 Mar 2022 08:50:14 -0800 (PST) MIME-Version: 1.0 References: <20220304015941.1704249-1-eric.dumazet@gmail.com> In-Reply-To: From: Eric Dumazet Date: Fri, 4 Mar 2022 08:50:03 -0800 Message-ID: Subject: Re: [PATCH] mm/page_alloc: call check_new_pages() while zone spinlock is not held To: Vlastimil Babka Cc: Eric Dumazet , Andrew Morton , linux-kernel , linux-mm , Mel Gorman , Michal Hocko , Shakeel Butt , Wei Xu , Greg Thelen , Hugh Dickins , David Rientjes Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 8650E80024 X-Stat-Signature: drb3chs1uopr8kz1kzrdrhbz1t3bp3g7 Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=LpExxzmS; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of edumazet@google.com designates 209.85.219.174 as permitted sender) smtp.mailfrom=edumazet@google.com X-HE-Tag: 1646412615-501358 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: On Fri, Mar 4, 2022 at 12:32 AM Vlastimil Babka wrote: > > > Ah, you found out already. Well maybe it could simply be moved inside the > loop under the locked section and always done when page != NULL? I mean if > check_new_pages() fails we just leak the problematic pages anyway so they > are no longer free to allocate anymore and we should not count them as such. > Yes, and I guess that calling __mod_zone_freepage_state() for the page about to be leaked is just fine. This means we can call check_newpages() without holding zone spinlock or hard irqs being masked. I will test something like: diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 3589febc6d31928f850ebe5a4015ddc40e0469f3..1804287c1b792b8aa0e964b17eb002b6b1115258 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3706,10 +3706,10 @@ struct page *rmqueue(struct zone *preferred_zone, * allocate greater than order-1 page units with __GFP_NOFAIL. */ WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1)); - spin_lock_irqsave(&zone->lock, flags); do { page = NULL; + spin_lock_irqsave(&zone->lock, flags); /* * order-0 request can reach here when the pcplist is skipped * due to non-CMA allocation context. HIGHATOMIC area is @@ -3721,15 +3721,15 @@ struct page *rmqueue(struct zone *preferred_zone, if (page) trace_mm_page_alloc_zone_locked(page, order, migratetype); } - if (!page) + if (!page) { page = __rmqueue(zone, order, migratetype, alloc_flags); - } while (page && check_new_pages(page, order)); - if (!page) - goto failed; - - __mod_zone_freepage_state(zone, -(1 << order), - get_pcppage_migratetype(page)); - spin_unlock_irqrestore(&zone->lock, flags); + if (!page) + goto failed; + } + __mod_zone_freepage_state(zone, -(1 << order), + get_pcppage_migratetype(page)); + spin_unlock_irqrestore(&zone->lock, flags); + } while (check_new_pages(page, order)); __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order); zone_statistics(preferred_zone, zone, 1);