From patchwork Fri Dec 16 15:40:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 9486845 X-Mozilla-Keys: nonjunk Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on sandeen.net X-Spam-Level: X-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.0 X-Spam-HP: BAYES_00=-1.9,RCVD_IN_DNSWL_HI=-5,RCVD_IN_SORBS_SPAM=0.5, RP_MATCHES_RCVD=-0.1 X-Original-To: sandeen@sandeen.net Delivered-To: sandeen@sandeen.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by sandeen.net (Postfix) with ESMTP id 0C88A92 for ; Fri, 16 Dec 2016 09:41:27 -0600 (CST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761842AbcLPPl2 (ORCPT ); Fri, 16 Dec 2016 10:41:28 -0500 Received: from mail-wj0-f194.google.com ([209.85.210.194]:33737 "EHLO mail-wj0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761684AbcLPPlQ (ORCPT ); Fri, 16 Dec 2016 10:41:16 -0500 Received: by mail-wj0-f194.google.com with SMTP id kp2so15139378wjc.0; Fri, 16 Dec 2016 07:40:43 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=ZqdS0Ohf4ld2EbmdtY3fah7P/5Rpg6Z7KbjsiBcA1Ns=; b=hywjiyZG0RYtgGl1pq1rjfv8QsZ/v8tGcLCTS9MPRvVAmERhcvmgfXy9VUqPvJ0Fc5 6IM4+ZHxYxXZ+1+++ZNIn91SJK3bpueGkX24T7S1j8ytYh1liUyLZt6kWJ/2bPxXfIi4 rPoDPrDCoTgv5I8ZOuc9hR0KlNwIzmLoBHIlxUD7Zr3YCGvoZuJxu9lBdffhPB0wQvpQ Rnil2pKxfsCSY2oOObVHdDZWp1SLYvXs0B7E+KpQvuYSSM1Ty15khpZSXgqg1VSFibbk bk/Op5tEx/oGpb00I5Wh22HrK1LNASx9ejDg4dzjNQ8w8LYRppK4RCRJOlc4GnfGoI4k 2x4w== X-Gm-Message-State: AIkVDXJlOwm8Wvj1olSALCmTPlflPaRyDEGWGUUqu7Z1QjWsxYYHDBsfym26tXK0bmx9uQ== X-Received: by 10.194.94.166 with SMTP id dd6mr3699750wjb.88.1481902842806; Fri, 16 Dec 2016 07:40:42 -0800 (PST) Received: from localhost ([213.151.95.130]) by smtp.gmail.com with ESMTPSA id u18sm3886734wmd.1.2016.12.16.07.40.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 16 Dec 2016 07:40:42 -0800 (PST) Date: Fri, 16 Dec 2016 16:40:41 +0100 From: Michal Hocko To: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Cc: Andrew Morton , Dave Chinner , Theodore Ts'o , Chris Mason , David Sterba , Jan Kara , ceph-devel@vger.kernel.org, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, logfs@logfs.org, linux-xfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mtd@lists.infradead.org, reiserfs-devel@vger.kernel.org, linux-ntfs-dev@lists.sourceforge.net, linux-f2fs-devel@lists.sourceforge.net, linux-afs@lists.infradead.org, LKML Subject: [PATCH 2/9 v2] xfs: introduce and use KM_NOLOCKDEP to silence reclaim lockdep false positives Message-ID: <20161216154041.GA7645@dhcp22.suse.cz> References: <20161215140715.12732-1-mhocko@kernel.org> <20161215140715.12732-3-mhocko@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20161215140715.12732-3-mhocko@kernel.org> User-Agent: Mutt/1.6.0 (2016-04-01) Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org Updated patch after Mike noticed a BUG_ON when KM_NOLOCKDEP is used. --- From 1497e713e11639157aef21cae29052cb3dc7ab44 Mon Sep 17 00:00:00 2001 From: Michal Hocko Date: Thu, 15 Dec 2016 13:06:43 +0100 Subject: [PATCH] xfs: introduce and use KM_NOLOCKDEP to silence reclaim lockdep false positives Now that the page allocator offers __GFP_NOLOCKDEP let's introduce KM_NOLOCKDEP alias for the xfs allocation APIs. While we are at it also change KM_NOFS users introduced by b17cb364dbbb ("xfs: fix missing KM_NOFS tags to keep lockdep happy") and use the new flag for them instead. There is really no reason to make these allocations contexts weaker just because of the lockdep which even might not be enabled in most cases. Changes since v1 - check for KM_NOLOCKDEP in kmem_flags_convert to not hit sanity BUG_ON as per Mike Galbraith Signed-off-by: Michal Hocko --- fs/xfs/kmem.h | 6 +++++- fs/xfs/libxfs/xfs_da_btree.c | 4 ++-- fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_dir2_readdir.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h index 689f746224e7..d5d634ef1f7f 100644 --- a/fs/xfs/kmem.h +++ b/fs/xfs/kmem.h @@ -33,6 +33,7 @@ typedef unsigned __bitwise xfs_km_flags_t; #define KM_NOFS ((__force xfs_km_flags_t)0x0004u) #define KM_MAYFAIL ((__force xfs_km_flags_t)0x0008u) #define KM_ZERO ((__force xfs_km_flags_t)0x0010u) +#define KM_NOLOCKDEP ((__force xfs_km_flags_t)0x0020u) /* * We use a special process flag to avoid recursive callbacks into @@ -44,7 +45,7 @@ kmem_flags_convert(xfs_km_flags_t flags) { gfp_t lflags; - BUG_ON(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL|KM_ZERO)); + BUG_ON(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL|KM_ZERO|KM_NOLOCKDEP)); if (flags & KM_NOSLEEP) { lflags = GFP_ATOMIC | __GFP_NOWARN; @@ -57,6 +58,9 @@ kmem_flags_convert(xfs_km_flags_t flags) if (flags & KM_ZERO) lflags |= __GFP_ZERO; + if (flags & KM_NOLOCKDEP) + lflags |= __GFP_NOLOCKDEP; + return lflags; } diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c index f2dc1a950c85..b8b5f6914863 100644 --- a/fs/xfs/libxfs/xfs_da_btree.c +++ b/fs/xfs/libxfs/xfs_da_btree.c @@ -2429,7 +2429,7 @@ xfs_buf_map_from_irec( if (nirecs > 1) { map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), - KM_SLEEP | KM_NOFS); + KM_SLEEP | KM_NOLOCKDEP); if (!map) return -ENOMEM; *mapp = map; @@ -2488,7 +2488,7 @@ xfs_dabuf_map( */ if (nfsb != 1) irecs = kmem_zalloc(sizeof(irec) * nfsb, - KM_SLEEP | KM_NOFS); + KM_SLEEP | KM_NOLOCKDEP); nirecs = nfsb; error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs, diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 7f0a01f7b592..f31ae592dcae 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1785,7 +1785,7 @@ xfs_alloc_buftarg( { xfs_buftarg_t *btp; - btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS); + btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOLOCKDEP); btp->bt_mount = mp; btp->bt_dev = bdev->bd_dev; diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index 003a99b83bd8..033ed65d7ce6 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c @@ -503,7 +503,7 @@ xfs_dir2_leaf_getdents( length = howmany(bufsize + geo->blksize, (1 << geo->fsblog)); map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + (length * sizeof(struct xfs_bmbt_irec)), - KM_SLEEP | KM_NOFS); + KM_SLEEP | KM_NOLOCKDEP); map_info->map_size = length; /*