Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp4258446ybi; Mon, 15 Jul 2019 06:20:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5qeylkub/WFAtKqiqZhiwRh5YD3Ean51/++3jO1sXyCVZtRtdwAh5fHHBVRXRNUNLZbxk X-Received: by 2002:a63:9249:: with SMTP id s9mr26034400pgn.356.1563196806031; Mon, 15 Jul 2019 06:20:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563196806; cv=none; d=google.com; s=arc-20160816; b=xjql4zBwc05rBcO1SZdzZGZrFIuF9JlHFDw7iObUgih4d88ZP5mn/KOaouR+XTjQNl pcfT+1VTJc1zzaoPS+VeXCYaoqoRyyAV8c1Egx+XYrtUgOxpuK9saijoSnH7Q7Ysgnqd 3wky3L8vpaMy351pINToyHbQKfQzqm3JepIVIe62gdiTS+Ruvw5q/BesvMd3d77w48Y/ 50EFnkkbcCxklD8e3hOVXZuAd1QUdsImuPShagww/2RDD8GIsCHPT13tKhG9msgwW/0V 67gi4MGfpuF42htjfFp1XbMX6JQ51rC1fmQPr452KZ6SIsdMK9BLIeDS8a1p/NSsA6y8 felg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=IYHZl7XqACbfQgkIvfXTj9QTDPr1mZ5nykvuxTT4n1g=; b=mUsu6+nzaAIdlIfU4/Io4qdIQnaydw/AFp1UBsqBUtXV/lpXTaqZeZMR+7nUG8nK4i COjrAsletrd1Y5Jhzgi5+vxLNKxwH4pw3Y4pTsXZOtoA3+FBq/0gp9uebXItCi9B/nOV QuebcSQ9VOwi6uUBVLxudhiFeJmECqTRZu4hAdRGhVyPJJPEHbgo7bljZoHrubuSWCqv 5HpXtGRsV+zgUmaZ5pGBrqL/oOk6M07f1KbjTDUCXZk3JKxzCxf5Px8mJF3Ln+piAR6j W6v6JGheBU+NgCthVBwfimKCvMrlyI3G4nJwopmprbJ3JbeFFZiq6hN7EyolFnyLy14y e9HQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f23si15920068pga.449.2019.07.15.06.19.46; Mon, 15 Jul 2019 06:20:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730189AbfGONS6 (ORCPT + 99 others); Mon, 15 Jul 2019 09:18:58 -0400 Received: from mx2.suse.de ([195.135.220.15]:50252 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730071AbfGONS6 (ORCPT ); Mon, 15 Jul 2019 09:18:58 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id F30B1AFFE; Mon, 15 Jul 2019 13:18:56 +0000 (UTC) Date: Mon, 15 Jul 2019 15:18:56 +0200 From: Michal Hocko To: David Rientjes Cc: Yang Shi , dvyukov@google.com, catalin.marinas@arm.com, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] mm: page_alloc: document kmemleak's non-blockable __GFP_NOFAIL case Message-ID: <20190715131856.GY29483@dhcp22.suse.cz> References: <1562964544-59519-1-git-send-email-yang.shi@linux.alibaba.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat 13-07-19 12:39:16, David Rientjes wrote: > On Sat, 13 Jul 2019, Yang Shi wrote: > > > When running ltp's oom test with kmemleak enabled, the below warning was > > triggerred since kernel detects __GFP_NOFAIL & ~__GFP_DIRECT_RECLAIM is > > passed in: > > > > WARNING: CPU: 105 PID: 2138 at mm/page_alloc.c:4608 __alloc_pages_nodemask+0x1c31/0x1d50 > > Modules linked in: loop dax_pmem dax_pmem_core > > ip_tables x_tables xfs virtio_net net_failover virtio_blk failover > > ata_generic virtio_pci virtio_ring virtio libata > > CPU: 105 PID: 2138 Comm: oom01 Not tainted 5.2.0-next-20190710+ #7 > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.10.2-0-g5f4c7b1-prebuilt.qemu-project.org 04/01/2014 > > RIP: 0010:__alloc_pages_nodemask+0x1c31/0x1d50 > > ... > > kmemleak_alloc+0x4e/0xb0 > > kmem_cache_alloc+0x2a7/0x3e0 > > ? __kmalloc+0x1d6/0x470 > > ? ___might_sleep+0x9c/0x170 > > ? mempool_alloc+0x2b0/0x2b0 > > mempool_alloc_slab+0x2d/0x40 > > mempool_alloc+0x118/0x2b0 > > ? __kasan_check_read+0x11/0x20 > > ? mempool_resize+0x390/0x390 > > ? lock_downgrade+0x3c0/0x3c0 > > bio_alloc_bioset+0x19d/0x350 > > ? __swap_duplicate+0x161/0x240 > > ? bvec_alloc+0x1b0/0x1b0 > > ? do_raw_spin_unlock+0xa8/0x140 > > ? _raw_spin_unlock+0x27/0x40 > > get_swap_bio+0x80/0x230 > > ? __x64_sys_madvise+0x50/0x50 > > ? end_swap_bio_read+0x310/0x310 > > ? __kasan_check_read+0x11/0x20 > > ? check_chain_key+0x24e/0x300 > > ? bdev_write_page+0x55/0x130 > > __swap_writepage+0x5ff/0xb20 > > > > The mempool_alloc_slab() clears __GFP_DIRECT_RECLAIM, kmemleak has > > __GFP_NOFAIL set all the time due to commit > > d9570ee3bd1d4f20ce63485f5ef05663866fe6c0 ("kmemleak: allow to coexist > > with fault injection"). > > > > It only clears __GFP_DIRECT_RECLAIM provisionally to see if the allocation > would immediately succeed before falling back to the elements in the > mempool. If that fails, and the mempool is empty, mempool_alloc() > attempts the allocation with __GFP_DIRECT_RECLAIM. So for the problem > described here, I think what we really want is this: > > diff --git a/mm/mempool.c b/mm/mempool.c > --- a/mm/mempool.c > +++ b/mm/mempool.c > @@ -386,7 +386,7 @@ void *mempool_alloc(mempool_t *pool, gfp_t gfp_mask) > gfp_mask |= __GFP_NORETRY; /* don't loop in __alloc_pages */ > gfp_mask |= __GFP_NOWARN; /* failures are OK */ > > - gfp_temp = gfp_mask & ~(__GFP_DIRECT_RECLAIM|__GFP_IO); > + gfp_temp = gfp_mask & ~(__GFP_DIRECT_RECLAIM|__GFP_IO|__GFP_NOFAIL); > > repeat_alloc: No, I do not think we should make mempool allocator more complex for something that is an implementation problem the kmemleak. -- Michal Hocko SUSE Labs