From patchwork Mon Aug 26 08:47:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 13777440 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 E426EC5472E for ; Mon, 26 Aug 2024 08:54:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 756276B01F3; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 706C86B01FB; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A6936B0202; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 32EF36B01F3 for ; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C6BF9C0D8A for ; Mon, 26 Aug 2024 08:53:59 +0000 (UTC) X-FDA: 82493784198.12.BD11350 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) by imf08.hostedemail.com (Postfix) with ESMTP id CDC94160006 for ; Mon, 26 Aug 2024 08:53:57 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf08.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.218.52 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724662368; a=rsa-sha256; cv=none; b=aiLcEj6D9tHKAHdZw6Fr5rAdZ0+PDA1PHyebkmbz6uHZ1JQwh50HgcUNXp9Snnj3a3Sc7m MKzysv9g4+M2FTMet8jweG7yKmt+VDINy3iez+bvy5eFRme5a36mzMBWX5aa2fOYXBhW8j tRnlvKXqZcirqPVZd5EH++mFZ/x/ppM= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf08.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.218.52 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724662368; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iRehPbKKjFe/0bKTvYhCt52a7lrFhafkYozCw3nsWtY=; b=ZYwuUzEy9E97JEc52bu9uUXwA++GaDmzCrSWMKBsGXNu0dRkIctNz5uD6CTRJPK26UVc8L mwRP5aIu/W5wO6Ldc4kAFIhWt4jdJ50wa38ExwdBcMDdi/9cz786q99piBAOlTIMFmTHDI R9PITSaUImDVxktcgUpiX66XzRCbVoc= Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-a86c476f679so132801766b.1 for ; Mon, 26 Aug 2024 01:53:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724662436; x=1725267236; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iRehPbKKjFe/0bKTvYhCt52a7lrFhafkYozCw3nsWtY=; b=JR53I26G8cq9VAbYQ/inWRO+aZr4/8tkgxXXSOuKv5zZkQ8zc88gWI+mJluvCi2OSK LiSuc2e7zqTYvh+PXJVG6bGMfSUzamuIOpuQB8CIFhDLPifkG7ClyYwrjHOLx3EHeF+a gIywpbjvObuThPzGnLBKgZL3GceGrTCziRS+t83S7RQmUL/8p0tPt+f8yUKtEmqtqtNA bPJT6tg9YMg2aCrAA0/uenuwAJfBOX8IF0zIBL5IFdMMkyew6UZke3U1lbvGA0Byl5Xy fY0l0gngnIjMDckCe10o+UNVKnV2x7t9RzrWZ2uZNV7tZ2AKFuTGAwj4tLkW0Z/hDZ0j u1RQ== X-Forwarded-Encrypted: i=1; AJvYcCUqWovOfKby2FGiJULSR/UgEnVNiJFAtpBnDiKTmwaDVFPH+8vYyoyvMLH15u3Iqm1sl0UeDjWcXw==@kvack.org X-Gm-Message-State: AOJu0Yz3kGAdVsUDtD1vQQKK/eLzcy0KhPAZrTu9Ii3afHvsNBX9odoc zjAPmtPkR707eiXIy7W4H8t2mKBw6WLqUfV1u/1/LyrCO80H4+kw X-Google-Smtp-Source: AGHT+IGg5DoRJLSlZ94fHIOZSVb3g7d20TrxkPLrpdD4iqZWcJSQeFk2/3ANrR2USPAvHF2BHuzCrg== X-Received: by 2002:a17:906:6a0d:b0:a86:80ef:4fe5 with SMTP id a640c23a62f3a-a86a54b024dmr679657766b.47.1724662435694; Mon, 26 Aug 2024 01:53:55 -0700 (PDT) Received: from localhost.localdomain ([193.86.92.181]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a868f21fe18sm630636866b.29.2024.08.26.01.53.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Aug 2024 01:53:55 -0700 (PDT) From: Michal Hocko To: Andrew Morton Cc: Christoph Hellwig , Yafang Shao , Kent Overstreet , jack@suse.cz, Christian Brauner , Alexander Viro , Paul Moore , James Morris , "Serge E. Hallyn" , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-bcachefs@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Hocko Subject: [PATCH 1/2] bcachefs: do not use PF_MEMALLOC_NORECLAIM Date: Mon, 26 Aug 2024 10:47:12 +0200 Message-ID: <20240826085347.1152675-2-mhocko@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240826085347.1152675-1-mhocko@kernel.org> References: <20240826085347.1152675-1-mhocko@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: CDC94160006 X-Stat-Signature: jyg6fr6ifbg8ubu1tudemsbsbb5f5fcf X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspam: Yes X-HE-Tag: 1724662437-186601 X-HE-Meta: U2FsdGVkX18/OV06k3CwjENA8bV72EfISj2ygiFCehSRCj4+ctI667qjxgMsXJgY/LJGfJ9PiKqSf/0F/fKO/8M0SzBT43U48rrOepHqYi68P0zfvMLKXHzZ03IcGwx/uUm0vQz20t5G/VD28RFggBWpZz6zaAWHR5MAB6zs9m9mbFIq9jsfgkH8Q1PZo4iatnsyh5JO937tSKhk3BBX8fQzCQ6ERh45i8XoE/v8RJtC6szeSBZpJbd1HgwV3/FqOxloHaCuagCGG2HYudHmbJImRfno+ideAnToeF2hfGliBgijo1ciaCbRW4Gjn4Qcr9Ev7Htx5JOgy3sQDYjsqa+56mTxgf0mt9+eEilb3MNAhme1sZW9pmfEG5tor6B6d+A5Oyjwadid9j1eUM2dff4OBx7QrDgQfcNTvNZYwDKTYxoBnkGqrdDP1QzWl+YT9Q+znAFAAv3R2H7MfjMDrnM9yZn0Z/BlvuOL+7yJoWaaLQJz+De0d9xJYXiJeT69Fkov3D8uZtUX5hPSO36fDyzbbC5TkMOZkOid0Cxh99CBCiNJwOBMXtCuG5AX3pGR3U+Hmr+RjnivSuZThG853ee9eZCyIu7gTMP29qTMzma8KiUwfZSwz0Hnh3wvuiGDVGIcvIu4tRvhbx6O54YqGGxvgujXRc6AUyyyU5Ft1ZKGMnHHaQ8PqLPuw51H6tRcaT7y+rnQe4uJVZqV/Q4PH0/zVFmeA2pivHrsncf+AcCQfwABO3Vdz4l3uFLzozXPNhECAq5ZkYzzr8WTSSrHbmF2wXA32BIVjsEfFxEYJxHzgxZR71tVe71f+qqjek8eg8Ih8bbIZjnTtPewsUdL7QaqN7Me9PquVnLj2zdKNwFVQUHGl7s2tE5vLlw2EinXfYZqLhRTBHdbqBBnjT4N6dFo9JCHdVhfbBq7gWqHSaqeFpuc1LHbyYX43BQTbAnP/Ti8iOuVguvtULz4czG q8/Y7+Ql +Iqr7ATOGgifxdNVfXfOZS1SGqQ/iTDZmvda7xt5ra3YGAVq2tQI4ryNkTykbr8BRSmjgtd+DmNHbiSwCui8n30yd9OWIux4jsxqxXuwGqilC07zP8MZhYrtMVuuAcDshTkDpFchrDl/0GRUtfKmTpBSwBXwCxmyqq3a13SWEnuDiV4e/cGfIKzBQp4zouHiPOpH33IxTA5ZbLnDg8CpgiZjnNY0U35SQi3ghCHNWvWuwLC8kPan/cGo1W/iZj+saAAB6+o7CzkCqoqLUNue0ej3Mct2kAZSt7YAiq7TKB/OpFNCodVwc0z6kT2TbIXMSRd0jPv6ealHYvCIXepvnhfksi6ILfoqyRHQ9ttwiyO8j9r34e3G/m/4W/66W2RVVeYX1dN1zcLykt5x+Mme6H89c5F+IQWnLdhgk6b04vqr2FDu34r+e6Js8T5M33nbvtQZ3oK2kvVbE99Ti4RTVRmh18UjLZqf+0l+9nyCxYx7Szb/fVwUkl4hjDb9Dtps2yCocnAIjRtSjPNjW6GNvFeecNW/CwHQ0X8DK 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: List-Subscribe: List-Unsubscribe: From: Michal Hocko bch2_new_inode relies on PF_MEMALLOC_NORECLAIM to try to allocate a new inode to achieve GFP_NOWAIT semantic while holding locks. If this allocation fails it will drop locks and use GFP_NOFS allocation context. We would like to drop PF_MEMALLOC_NORECLAIM because it is really dangerous to use if the caller doesn't control the full call chain with this flag set. E.g. if any of the function down the chain needed GFP_NOFAIL request the PF_MEMALLOC_NORECLAIM would override this and cause unexpected failure. While this is not the case in this particular case using the scoped gfp semantic is not really needed bacause we can easily pus the allocation context down the chain without too much clutter. Acked-by: Christoph Hellwig Signed-off-by: Michal Hocko Reviewed-by: Jan Kara --- fs/bcachefs/fs.c | 14 ++++++-------- fs/inode.c | 6 +++--- include/linux/fs.h | 7 ++++++- include/linux/lsm_hooks.h | 2 +- include/linux/security.h | 4 ++-- security/security.c | 8 ++++---- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index 15fc41e63b6c..7a55167b9133 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -231,9 +231,9 @@ static struct inode *bch2_alloc_inode(struct super_block *sb) BUG(); } -static struct bch_inode_info *__bch2_new_inode(struct bch_fs *c) +static struct bch_inode_info *__bch2_new_inode(struct bch_fs *c, gfp_t gfp) { - struct bch_inode_info *inode = kmem_cache_alloc(bch2_inode_cache, GFP_NOFS); + struct bch_inode_info *inode = kmem_cache_alloc(bch2_inode_cache, gfp); if (!inode) return NULL; @@ -245,7 +245,7 @@ static struct bch_inode_info *__bch2_new_inode(struct bch_fs *c) mutex_init(&inode->ei_quota_lock); memset(&inode->ei_devs_need_flush, 0, sizeof(inode->ei_devs_need_flush)); - if (unlikely(inode_init_always(c->vfs_sb, &inode->v))) { + if (unlikely(inode_init_always_gfp(c->vfs_sb, &inode->v), gfp)) { kmem_cache_free(bch2_inode_cache, inode); return NULL; } @@ -258,12 +258,10 @@ static struct bch_inode_info *__bch2_new_inode(struct bch_fs *c) */ static struct bch_inode_info *bch2_new_inode(struct btree_trans *trans) { - struct bch_inode_info *inode = - memalloc_flags_do(PF_MEMALLOC_NORECLAIM|PF_MEMALLOC_NOWARN, - __bch2_new_inode(trans->c)); + struct bch_inode_info *inode = __bch2_new_inode(trans->c, GFP_NOWARN | GFP_NOWAIT); if (unlikely(!inode)) { - int ret = drop_locks_do(trans, (inode = __bch2_new_inode(trans->c)) ? 0 : -ENOMEM); + int ret = drop_locks_do(trans, (inode = __bch2_new_inode(trans->c, GFP_NOFS)) ? 0 : -ENOMEM); if (ret && inode) { __destroy_inode(&inode->v); kmem_cache_free(bch2_inode_cache, inode); @@ -328,7 +326,7 @@ __bch2_create(struct mnt_idmap *idmap, if (ret) return ERR_PTR(ret); #endif - inode = __bch2_new_inode(c); + inode = __bch2_new_inode(c, GFP_NOFS); if (unlikely(!inode)) { inode = ERR_PTR(-ENOMEM); goto err; diff --git a/fs/inode.c b/fs/inode.c index 86670941884b..95fd67a6cac3 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -153,7 +153,7 @@ static int no_open(struct inode *inode, struct file *file) * These are initializations that need to be done on every inode * allocation as the fields are not initialised by slab allocation. */ -int inode_init_always(struct super_block *sb, struct inode *inode) +int inode_init_always(struct super_block *sb, struct inode *inode, gfp_t gfp) { static const struct inode_operations empty_iops; static const struct file_operations no_open_fops = {.open = no_open}; @@ -230,14 +230,14 @@ int inode_init_always(struct super_block *sb, struct inode *inode) #endif inode->i_flctx = NULL; - if (unlikely(security_inode_alloc(inode))) + if (unlikely(security_inode_alloc(inode, gfp))) return -ENOMEM; this_cpu_inc(nr_inodes); return 0; } -EXPORT_SYMBOL(inode_init_always); +EXPORT_SYMBOL(inode_init_always_gfp); void free_inode_nonrcu(struct inode *inode) { diff --git a/include/linux/fs.h b/include/linux/fs.h index fd34b5755c0b..d46ca71a7855 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3027,7 +3027,12 @@ extern loff_t default_llseek(struct file *file, loff_t offset, int whence); extern loff_t vfs_llseek(struct file *file, loff_t offset, int whence); -extern int inode_init_always(struct super_block *, struct inode *); +extern int inode_init_always_gfp(struct super_block *, struct inode *, gfp_t); +static inline int inode_init_always(struct super_block *sb, struct inode *inode) +{ + return inode_init_always_gfp(sb, inode, GFP_NOFS); +} + extern void inode_init_once(struct inode *); extern void address_space_init_once(struct address_space *mapping); extern struct inode * igrab(struct inode *); diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index a2ade0ffe9e7..b08472d64765 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -150,6 +150,6 @@ extern struct lsm_info __start_early_lsm_info[], __end_early_lsm_info[]; __used __section(".early_lsm_info.init") \ __aligned(sizeof(unsigned long)) -extern int lsm_inode_alloc(struct inode *inode); +extern int lsm_inode_alloc(struct inode *inode, gfp_t gfp); #endif /* ! __LINUX_LSM_HOOKS_H */ diff --git a/include/linux/security.h b/include/linux/security.h index 1390f1efb4f0..7c6b9b038a0d 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -336,7 +336,7 @@ int security_dentry_create_files_as(struct dentry *dentry, int mode, struct cred *new); int security_path_notify(const struct path *path, u64 mask, unsigned int obj_type); -int security_inode_alloc(struct inode *inode); +int security_inode_alloc(struct inode *inode, gfp_t gfp); void security_inode_free(struct inode *inode); int security_inode_init_security(struct inode *inode, struct inode *dir, const struct qstr *qstr, @@ -769,7 +769,7 @@ static inline int security_path_notify(const struct path *path, u64 mask, return 0; } -static inline int security_inode_alloc(struct inode *inode) +static inline int security_inode_alloc(struct inode *inode, gfp_t gfp) { return 0; } diff --git a/security/security.c b/security/security.c index 8cee5b6c6e6d..3581262da5ee 100644 --- a/security/security.c +++ b/security/security.c @@ -660,14 +660,14 @@ static int lsm_file_alloc(struct file *file) * * Returns 0, or -ENOMEM if memory can't be allocated. */ -int lsm_inode_alloc(struct inode *inode) +int lsm_inode_alloc(struct inode *inode, gfp_t gfp) { if (!lsm_inode_cache) { inode->i_security = NULL; return 0; } - inode->i_security = kmem_cache_zalloc(lsm_inode_cache, GFP_NOFS); + inode->i_security = kmem_cache_zalloc(lsm_inode_cache, gfp); if (inode->i_security == NULL) return -ENOMEM; return 0; @@ -1582,9 +1582,9 @@ int security_path_notify(const struct path *path, u64 mask, * * Return: Return 0 if operation was successful. */ -int security_inode_alloc(struct inode *inode) +int security_inode_alloc(struct inode *inode, gfp_t gfp) { - int rc = lsm_inode_alloc(inode); + int rc = lsm_inode_alloc(inode, gfp); if (unlikely(rc)) return rc; From patchwork Mon Aug 26 08:47:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 13777441 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 5EC4AC5472F for ; Mon, 26 Aug 2024 08:54:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 33AC76B02E9; Mon, 26 Aug 2024 04:54:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2C3166B02EA; Mon, 26 Aug 2024 04:54:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0EC466B04E2; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id C85F26B02E9 for ; Mon, 26 Aug 2024 04:54:00 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 7D89F40E2D for ; Mon, 26 Aug 2024 08:54:00 +0000 (UTC) X-FDA: 82493784240.02.D355A17 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) by imf29.hostedemail.com (Postfix) with ESMTP id 84F62120004 for ; Mon, 26 Aug 2024 08:53:58 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf29.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.218.44 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724662419; a=rsa-sha256; cv=none; b=SyZSfX2N2JGXEuQFuM5uBh2CxG1/aCRmYVMQw+VCfvEsircalqkBQpEpI9ERWI8AJl8KaB Bp0k7AziyVbFn3nd2NPU+6Fq7cgsdEjUPifHnP1dWQ6qT+t1yVlM8I57Hc9zTfDuK7Uiwf V2RNJw9QrVCDr+C26ieIWYf5s+yl9wE= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf29.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.218.44 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724662419; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E4kEvuNqKI0xTjj6I4wqTHJS1sNMpYcp7Dr6Uq95pto=; b=KqczN9YnToWmbrJ8vKYoBed496f1bDvggQyfBK1pMzp8CgbJDtj7+vog4U373n0SZkXCmN DfGPPJ7dsO4dScFBCoqEQzVNgvs5LQ4XAAybnmj0Dnuyq4BHpqWnDHjQmV8kdG2BHo8O+o kqOWj36gp//NM7oK57INIzSXuzqoLC8= Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-a86910caf9cso655227066b.1 for ; Mon, 26 Aug 2024 01:53:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724662437; x=1725267237; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E4kEvuNqKI0xTjj6I4wqTHJS1sNMpYcp7Dr6Uq95pto=; b=RelhnOKO7CelZcb+jo7ECAxxuGFcx8dvYNaa4HAciH+YTO7+TbsW6V31rAB1Hd3MWA B7L97Wovbn3EkW3Wp+RHOm5bVkaUWGFk5nym9Md2mBkT8Q1jr0emTucjeIgIqV2jIyQV uAOqB7khUWFIs5/IkaxIM3HXP4JWAtPtLVK6MDJGM19lCQMnoK/rzvkJLyDhxq7g0xH0 KMm123BGW3iGJ5b6TQmTzUKwb9qcaQEyBKJHDDA3VydpcbgYecOpzlegfzjd9HS7al83 XhMbZioBUXF8uapY5yCcElZ2CCfK0cPhBfSyQRvcpqVHRqmImi/5aHGW7M0yFZU2Iixg JB0g== X-Forwarded-Encrypted: i=1; AJvYcCVUXr4AvQNKxkl2H+kflfI+JT5HaUiUk2ocwAiAhQQAlAe1KNvTIBG4Va4HyzKoY6qX9bVkv/vr7w==@kvack.org X-Gm-Message-State: AOJu0Yw/ouafxyOC6M0LTx7fRTU0rCh+8m7gn4e4/b4vheEupWzdD6Jl Xqh/aX+7iKw1mb8iViIunqqvyg7TqjUqA7A55teFPD7AokY+Xhb0 X-Google-Smtp-Source: AGHT+IF1fJpfy3mPNIRs30Wnajmd99gCu+0+b/DeTT6aTwMVnETwc04A+X+3AnJTgxAHcIGYmfyZ+g== X-Received: by 2002:a17:907:1c8e:b0:a75:7a8:d70c with SMTP id a640c23a62f3a-a86a2f14394mr1133364766b.4.1724662436552; Mon, 26 Aug 2024 01:53:56 -0700 (PDT) Received: from localhost.localdomain ([193.86.92.181]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a868f21fe18sm630636866b.29.2024.08.26.01.53.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Aug 2024 01:53:56 -0700 (PDT) From: Michal Hocko To: Andrew Morton Cc: Christoph Hellwig , Yafang Shao , Kent Overstreet , jack@suse.cz, Christian Brauner , Alexander Viro , Paul Moore , James Morris , "Serge E. Hallyn" , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-bcachefs@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Hocko Subject: [PATCH 2/2] mm: drop PF_MEMALLOC_NORECLAIM Date: Mon, 26 Aug 2024 10:47:13 +0200 Message-ID: <20240826085347.1152675-3-mhocko@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240826085347.1152675-1-mhocko@kernel.org> References: <20240826085347.1152675-1-mhocko@kernel.org> MIME-Version: 1.0 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspamd-Queue-Id: 84F62120004 X-Rspamd-Server: rspam01 X-Stat-Signature: zfyeygtfapm5x5eh8rc8rtpwkeubr5p7 X-Rspam: Yes X-HE-Tag: 1724662438-93498 X-HE-Meta: U2FsdGVkX1+LFgn77LxSYUJUKsrabu7UUqNnRJcsK04Cy0X14hi+DGBYgrRpT39D5fdtmt/yeZsFKJsXzpp0Q5lF9iQu6T3gbR40uRcZ/zuQKMXRSqfLFMZM+B+ATBALeSc6n66y44yqWa7WJwFWYEWo9Q4YDry6T9dMgzfMS2USXNA9y+1fiV15DdO4iDw0bOVRigfzpBCAdgAwlPNEuratjAgSkwCRaUU0z6MsFO9+piA1UZ8Sv4atvS0KzzbZT+in3RfS9sYPGV2QWua3ATPfnr40hmrzncsChBSivElrPhYyrulV1pUXYZVqooFBLOApua7bUt6GRd9Kw7VBayynKFLZOtX2Cu3UUHHnm/Q76dd1Z++ZlLtnkHjCILZXlFDIMUf2GkAPtZJIJBe0ixTd3DX2v5ydXzGscbFsDw8uMZiBYyxjbWuehKRHJIoYMWz6AX42J5RlZd1sTkezfikOmUmic8/poI6YymnOQ4/w7nWrxKfTr3vs+tSTT5ndh3rhvfQWdHfFY9kXdLz0jl00xQMhMMvDSSdxwEyCuJa9XExowuOa9d6g0w6O1Li501TFBnEBoDaYLdh7L3y5cIGVhSfCvKvrQbeC4qzPopXB8scuBrLLXqCGsiQnn4iPnWWGgbdOy3Uom36QMb6pa24PAfVFk2o6Kobn2M/Mb5hnujBXZ1p6UDdCn0NDGCVqNhLTI1Ma1geY6SlrPpV7xwQt34jmk+iRsS2+0men9AKjJqw3MmCirLFJMfp4SPHKYXh6iLsXtc14aPCdt3RRJ0t6tgSvl7zfa92Gpz/rYH1ufLq3YldehlebHIlw0uGHQHi0w5nXG2AKh9U7EvW+ChYEz4B3yaAaH6Z7w384DCIU8jiXZcN6z/psaZyhmwerVLqm8ne/Cf+lRU6Moj42TIkJ6LniiUAQtJqNA6GaQ1WkGjb1grG3taVkd4lfRD65UOJ4iPQ5eBR+Cz11R3V llI0NT2O 6TY5zWzOUF33PzMjNxVmM0o7rbKfi4C1VPPVuEUJdLXcYKd9jNmgpXsAXx+tE9nIc08RMPvQkXJipy/6SL7/iYJchuNp56pmUW46IhIyYxX1fZfu1PhoAm2KsFFYOxDrvTmH3FIUlmFY8BDqAQa8N5fSw3SXw1arjzzI4bFs1fFwapiOm+DckpC5r16GuokZPFC8v92vSVXD5yOKunhtPAXfh2GUeiNLA0EZTOXb1QVQIRu2r1IV5ATUmXVLXhfIQFZ24zTcWOT5LM4CRNR4O5vLmoMBmv3HbZAsOy6L1cSQSvDwqxt6NAGG+7bU/eEOmUjQIrykqn3HZoee0AYX85fo7ijCTbY7rLqNDy+IKSVcTLCfQEqeGyTDEwvxO/D4T8c/SPImZKON7WADI/wWnp4cylWEy6Wa0we0jOq7d2nrBeJsuMWufts5rDXCnPUQrHeGeaxtT6iImeO2nXuO7upoC8AxU9JwwYtxqpI6kgxblqCelwXE/tvh1zsO4mKxwAWSmTCbMCqGeB3XOOD6+h4r+m5m10+kSWJVQLXrvernTGAMGiP0rh70O/sQUgAUX+aAkp4Ki6h8p2uqcjjmOBBwvEmFsMIBmUB4V 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: List-Subscribe: List-Unsubscribe: From: Michal Hocko There is no existing user of the flag and the flag is dangerous because a nested allocation context can use GFP_NOFAIL which could cause unexpected failure. Such a code would be hard to maintain because it could be deeper in the call chain. PF_MEMALLOC_NORECLAIM has been added even when it was pointed out [1] that such a allocation contex is inherently unsafe if the context doesn't fully control all allocations called from this context. [1] https://lore.kernel.org/all/ZcM0xtlKbAOFjv5n@tiehlicka/ Signed-off-by: Michal Hocko Signed-off-by: Michal Hocko Reviewed-by: Matthew Wilcox (Oracle) Reviewed-by: Christoph Hellwig Reviewed-by: Dave Chinner Reviewed-by: Vlastimil Babka --- include/linux/sched.h | 1 - include/linux/sched/mm.h | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index f8d150343d42..72dad3a6317a 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1657,7 +1657,6 @@ extern struct pid *cad_pid; * I am cleaning dirty pages from some other bdi. */ #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ #define PF_RANDOMIZE 0x00400000 /* Randomize virtual address space */ -#define PF_MEMALLOC_NORECLAIM 0x00800000 /* All allocation requests will clear __GFP_DIRECT_RECLAIM */ #define PF_MEMALLOC_NOWARN 0x01000000 /* All allocation requests will inherit __GFP_NOWARN */ #define PF__HOLE__02000000 0x02000000 #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */ diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index 91546493c43d..c49f2b24acb9 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -260,16 +260,13 @@ static inline gfp_t current_gfp_context(gfp_t flags) if (unlikely(pflags & (PF_MEMALLOC_NOIO | PF_MEMALLOC_NOFS | - PF_MEMALLOC_NORECLAIM | PF_MEMALLOC_NOWARN | PF_MEMALLOC_PIN))) { /* * Stronger flags before weaker flags: - * NORECLAIM implies NOIO, which in turn implies NOFS + * NOIO implies NOFS */ - if (pflags & PF_MEMALLOC_NORECLAIM) - flags &= ~__GFP_DIRECT_RECLAIM; - else if (pflags & PF_MEMALLOC_NOIO) + if (pflags & PF_MEMALLOC_NOIO) flags &= ~(__GFP_IO | __GFP_FS); else if (pflags & PF_MEMALLOC_NOFS) flags &= ~__GFP_FS;