From patchwork Thu Dec 15 14:07:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 9476267 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8F10560826 for ; Thu, 15 Dec 2016 14:12:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6FD8228782 for ; Thu, 15 Dec 2016 14:12:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 64DCC28789; Thu, 15 Dec 2016 14:12:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EA86628782 for ; Thu, 15 Dec 2016 14:12:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758186AbcLOOLm (ORCPT ); Thu, 15 Dec 2016 09:11:42 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33862 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752249AbcLOOHx (ORCPT ); Thu, 15 Dec 2016 09:07:53 -0500 Received: by mail-wm0-f67.google.com with SMTP id g23so6721067wme.1; Thu, 15 Dec 2016 06:07:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wX0lbt9WPNzIH+lEoTvQRKOsS1mG1d3JepxJLa3Kqko=; b=s78lABWPrB1Kn6XWzWntDlsXUq4W59E3iVY23ONrerGEsV+UDd+yoG34gNQVtRWDQ+ wfj3hIaZXOTdqYE6cUzZBZl9HMPCE64IGjLePeZYdo4OYWjFixtLricWnRiQw2inKpZF eRmzQ2GqvqacaKpX0l2gTdRJKSmMg8dqVwWNoMJIxIM3gQp9NFADTK/1iAqTAXJufGsW uYDGm85etxB7D36vKsA4/6wgUmoRKhF3wygxvmMzWo1T+U2jWNI9ctQNblC+Q+aM2sHF Wxr29Dkb+igd78ZBWEaWS+A01Mx0U9OdASunfJ+RRwesfOGtMNLgiGOog3A22kiJPX58 oQDw== X-Gm-Message-State: AIkVDXIdHjA5fAGRHPtKIEIqghvPF9OJI/wsxbM2RVILGrdzcIYG+/Eu5G+mpkbvjThn/w== X-Received: by 10.28.218.213 with SMTP id r204mr1634040wmg.69.1481810871344; Thu, 15 Dec 2016 06:07:51 -0800 (PST) Received: from tiehlicka.suse.cz ([213.151.95.130]) by smtp.gmail.com with ESMTPSA id d8sm12646880wmi.21.2016.12.15.06.07.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Dec 2016 06:07:50 -0800 (PST) From: Michal Hocko To: , 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 , Michal Hocko Subject: [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence reclaim lockdep false positives Date: Thu, 15 Dec 2016 15:07:08 +0100 Message-Id: <20161215140715.12732-3-mhocko@kernel.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161215140715.12732-1-mhocko@kernel.org> References: <20161215140715.12732-1-mhocko@kernel.org> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Michal Hocko 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. Signed-off-by: Michal Hocko --- fs/xfs/kmem.h | 4 ++++ fs/xfs/libxfs/xfs_da_btree.c | 4 ++-- fs/xfs/xfs_buf.c | 2 +- fs/xfs/xfs_dir2_readdir.c | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h index 689f746224e7..ea3984091d58 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 @@ -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; /*