Received: by 10.192.165.148 with SMTP id m20csp4858356imm; Tue, 24 Apr 2018 09:29:07 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/6q+Ye1hxRGSq7nj2l9WMlI32etzpvMcVwkSrrho2i+RpjZExioa7JbtGBIrHjv6z6COuH X-Received: by 10.98.60.16 with SMTP id j16mr16849014pfa.7.1524587347569; Tue, 24 Apr 2018 09:29:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524587347; cv=none; d=google.com; s=arc-20160816; b=qrvOHWEDavQZATWARdlmWwVCtwMjDMspGJtxjJz9uneJAlThIAXacZyRER0A3X1QEr 2gC++r74bVPjSMksiAPbgjLF09ZtDgQDua9sAGs7uZJdlLqQOHId5OYrERBAecYKPB7o CQACxdIsLTYHrSqS3f3KZ0IoYEX3grJBMlrOcp2Mg0r3EM7eEw+myauHyTSD4BBYqU/8 kPNUgZRWAdZ2wwGZ75c+VVSFJbxMBvt45sTdjD6mroLDHPjIHI0qc4wNalvZSgtMJqly ggsQHhDprEBw3UmxlsRioOiLgLr8G3qEay7+7IgqyVL0hGGuYxuWl8bbZZXqVOGq9EAX iiqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date :arc-authentication-results; bh=5I73+bXrzio7mvTh15XKYcY2EvhwqzESZjRAsHmcsiY=; b=Jv4a8a+4QUorBnw3IABRk9yBX7R7JovBSiZ+APOdcNUZN7xaveva2nFZpBcobuoGPu pZZ75IKrAVHZ5NDr1ORundydvzPmngyt0xwYkTx9cqirBzssBTDgW9gHnsBuja8o9Ebf J+KIA3Hw4Llzag6J37yUKH3tTRJ16aJfU2AH7m6r3euNRYtyzongFayP4XIpe4Z2d+2n J9doyq/kbvmq/wEd/KKgJHqYVxN6i0R+HUsU/lOZKn8wrJCIvZmZTAUiO7ce0kho+d4b 66Pb1cw0ITLjnCjnVJkxd5IznNwswRS0dVNcW36OU+Ml9i9LK0QZtSyioRP4OgaJIl8P BxfQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i11si11777948pgt.19.2018.04.24.09.28.53; Tue, 24 Apr 2018 09:29:07 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752318AbeDXQ1V (ORCPT + 99 others); Tue, 24 Apr 2018 12:27:21 -0400 Received: from mx2.suse.de ([195.135.220.15]:40939 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751760AbeDXQ1U (ORCPT ); Tue, 24 Apr 2018 12:27:20 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3B3A9AF36; Tue, 24 Apr 2018 16:27:18 +0000 (UTC) Date: Tue, 24 Apr 2018 10:27:12 -0600 From: Michal Hocko To: LKML Cc: Artem Bityutskiy , Richard Weinberger , David Woodhouse , Brian Norris , Boris Brezillon , Marek Vasut , Cyrille Pitchen , Theodore Ts'o , Andreas Dilger , Steven Whitehouse , Bob Peterson , Trond Myklebust , Anna Schumaker , Adrian Hunter , Philippe Ombredanne , Kate Stewart , Mikulas Patocka , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, linux-ext4@vger.kernel.org, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mm@kvack.org Subject: vmalloc with GFP_NOFS Message-ID: <20180424162712.GL17484@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, it seems that we still have few vmalloc users who perform GFP_NOFS allocation: drivers/mtd/ubi/io.c fs/ext4/xattr.c fs/gfs2/dir.c fs/gfs2/quota.c fs/nfs/blocklayout/extent_tree.c fs/ubifs/debug.c fs/ubifs/lprops.c fs/ubifs/lpt_commit.c fs/ubifs/orphan.c Unfortunatelly vmalloc doesn't suppoer GFP_NOFS semantinc properly because we do have hardocded GFP_KERNEL allocations deep inside the vmalloc layers. That means that if GFP_NOFS really protects from recursion into the fs deadlocks then the vmalloc call is broken. What to do about this? Well, there are two things. Firstly, it would be really great to double check whether the GFP_NOFS is really needed. I cannot judge that because I am not familiar with the code. It would be great if the respective maintainers (hopefully get_maintainer.sh pointed me to all relevant ones). If there is not reclaim recursion issue then simply use the standard vmalloc (aka GFP_KERNEL request). If the use is really valid then we have a way to do the vmalloc allocation properly. We have memalloc_nofs_{save,restore} scope api. How does that work? You simply call memalloc_nofs_save when the reclaim recursion critical section starts (e.g. when you take a lock which is then used in the reclaim path - e.g. shrinker) and memalloc_nofs_restore when the critical section ends. _All_ allocations within that scope will get GFP_NOFS semantic automagically. If you are not sure about the scope itself then the easiest workaround is to wrap the vmalloc itself with a big fat comment that this should be revisited. Does that sound like something that can be done in a reasonable time? I have tried to bring this up in the past but our speed is glacial and there are attempts to do hacks like checking for abusers inside the vmalloc which is just too ugly to live. Please do not hesitate to get back to me if something is not clear. Thanks! -- Michal Hocko SUSE Labs