From patchwork Thu Sep 26 17:11:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 13895534 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 7A917E7716D for ; Thu, 5 Dec 2024 15:20:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A87416B00FB; Thu, 5 Dec 2024 10:19:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9760F6B00E5; Thu, 5 Dec 2024 10:19:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2E6CC6B00A5; Thu, 5 Dec 2024 10:19:09 -0500 (EST) 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 785BC6B00A0 for ; Thu, 26 Sep 2024 13:29:55 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 1FAE5C0116 for ; Thu, 26 Sep 2024 17:29:55 +0000 (UTC) X-FDA: 82607577150.23.70A6701 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by imf16.hostedemail.com (Postfix) with ESMTP id 253DC180007 for ; Thu, 26 Sep 2024 17:29:51 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf16.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727371775; a=rsa-sha256; cv=none; b=F9rvqboGuMNLUfYozJpwhZu8vsKSWZrkCqqFrgK1/VYAF/9xeDj8d8aPnCDJqHLJEZW8c/ 2j1NzTwMfHrazUnmwrxchLUI4l5ugcJ5j2vwFu9z6TcQbz4NN/mYuSAePHdnq8bKODociN eUVyYy2BSXKdmNwfq6vB93fV8YmJIUk= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf16.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.208.171 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=1727371775; 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=Uh5VcWX6XVNjxZ0G2QghwWk3gmLuGFWmazxAIrTMtUY=; b=NZ6eM/mdq5AuJ0LME00Rvv0GC8S++7SyBbboOpVhkslH8XwxwOSn9fVacYBjFIYl3tbKD1 ZiHLGv71Qxq/rNLyeMEJHtDIG0c0q42FmSRtlh19IgxaFKLnjwwota4e49vApZlou2DvhX IEo1sLjtR0SH6E7vkIMaU7Vo2JVXMjw= Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2f77be8ffecso14878371fa.1 for ; Thu, 26 Sep 2024 10:29:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727371790; x=1727976590; 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=Uh5VcWX6XVNjxZ0G2QghwWk3gmLuGFWmazxAIrTMtUY=; b=jDDh+inG8z4lmNKnGvhVNijO0gHRdaM2p3+AALmXQQCid1guLGHYRoNozU9u658eq+ VRvZ8a50JST0Gi0FypNUl5gm/EGA+wCT5YeDxIAJyIUx7AIWiBRp/PEu4H69EmvCH9y4 ud9fV86T6vDUeuvxW9usxrQ+QuZDFSCGBGtnzzt3PxMRyw0rbP2zwljBZE9PQxZD/E4I z4/Oc7N0WvlLVCfZHBb5PFwCh8wXhsSfq4hyULIfqxueB0G39u9IFMEkwCz2fzI3HM9J /91YOkYwFEEux5xPhi36tASU4NQVfyKj6GvA+NsASs0l3ro9NSwCIAif/4P7QGKioopT 515Q== X-Forwarded-Encrypted: i=1; AJvYcCXdLYY5VSoV63VrrUfv4Nxft22dPpGrxONcP2J6yMsIXOmCryvLi9TaHtthp8JArVjliAc5KHPRtA==@kvack.org X-Gm-Message-State: AOJu0Yw9T56qG9om00YEn9GmIhh1jzSv1s7ekIoC8Z1JcClg4vV8rS+A +n8TA9SwjZSIysrV413t1AebVxV1JxP3UGe/Vmnuk9MdWRklaYa+ X-Google-Smtp-Source: AGHT+IE3aKb6s4PhYQSBb3iLsM1tDswQY0GD3K53dwSMyDvXCbEiaOa9yfIg/3I3/G+UKXBq0781pA== X-Received: by 2002:a2e:a58b:0:b0:2f7:90b8:644e with SMTP id 38308e7fff4ca-2f9d3e3b954mr3349051fa.1.1727371790034; Thu, 26 Sep 2024 10:29:50 -0700 (PDT) Received: from localhost.localdomain (109-81-81-255.rct.o2.cz. [109.81.81.255]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c88245eb15sm145336a12.49.2024.09.26.10.29.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Sep 2024 10:29:49 -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 , Dave Chinner Subject: [PATCH 1/2] bcachefs: do not use PF_MEMALLOC_NORECLAIM Date: Thu, 26 Sep 2024 19:11:50 +0200 Message-ID: <20240926172940.167084-2-mhocko@kernel.org> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20240926172940.167084-1-mhocko@kernel.org> References: <20240926172940.167084-1-mhocko@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: g3s4xm8uabf77oic57mz54dd8fp6i6er X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspamd-Queue-Id: 253DC180007 X-Rspamd-Server: rspam02 X-Rspam: Yes X-HE-Tag: 1727371791-173785 X-HE-Meta: U2FsdGVkX1+UR+xKgsL+8DZ+SER135cE4VnK0NZd5CB30Z4o3+YFK8liJmA6O06K7c2vWOGxZipH6cqrdMs8uc7Xjwsx+htCiGMUo0SL9KIrToNQXHncZA7rhK6ZH3sDIFONdHCRHjXhGJ5oOoS6I95BjNh96yBn0YA44Nu2Mx3oMBNy0Rmuv1aA3j4QthX+yqqxsDd+lNEieDB2fr6BkiERC5bPIbh4eyr1y3JB5Pf/nVhzjU+D/Da83ot2g5x1QeK53Wi10jBvwPZYnR4MhPKG4w2MwrDa6LY8wEi6Ld2sHYK0cHV78VB2fuBqsuNalFhFBpNR4p9wsXuCU7SZDjtqOyCM/hKeK9BcJuvK8hVoGvMMjen9J0iWV7VwZ53UlIpykOG04kyPs1Wg97lQsGwHjo9tOeUP8jXmFmncZ8lNPs7y/J9oWroYSuaK4S4k6/cpFrTsMJ4NSuEa1QRYGNFOid6e+lkKoCbwgxq5NjwAV8LjcN36R3lFvVr9mU+mp9/e7VhiEiGxJhe/uB8fjQMMQpy+HipXBZXtVy5f7YaTDaRDgKiS4sXphQDr+ebGFc3jAj8L2S5fFxm5lLmOxUte4Eha6P1e6n+kIqtHdL+z2VRWqNq29cczKlu76fUuRsILB5jsuYaA8VoB/K7RHvE2d2AMdaZIIPmNw7H+OepZocFIjSFNJ/tXqg2wc895KqZ4U7LZ5zDYmB30rAsOucHIygTdb8WUomeBvBCUttcwQo4bAkICtzfwEawYdTBOUP4DK1KjjM37MflIHqsUydpHSG5ZBIBX2p8Yb84TVWM2L4VhrwF9NLqUwXWYwJS2Y3B1FP6RN5mJ3ADUODRKGyb8Sdamt77zmSyFcvUkkib/s8KX6njGe/k4H1uatlwfl3QKO+oXsjjbDTn6QZeJaejtLJcJn29fRuf1yQefNtAseaJitcCVnUCn9vksSIfJd20RBVvP3sKQMdWEKjI dy7NoTQ5 12pdBXCsmTRlU9aeOawBMOjxlyRwX619K45IH8UVCJDRFKTpWMb+L596f/e02TBFn+V4c+O1KLwiAtdJp6jC2iIPwRBEhgjhA37k6uYLYak2RUloW3mZ7xqEvxWpx6hijDKRmJVWEcTHVTEb1GV9G7gW1pcrierxfIs6riRLPmYEYKLoYjRNyL7xI0r5h3znW5n0HXsrri7KkfZv0ajoGS3peLpAaY0JKQSJGuw3N7Xsnem2T4Qg6qhz+gZrBMFXGsv/MNDeHTqOMHOw1XgsMVV1fp/GGzqoGRgURihHf+oFddn6WlIdhbknyfLP7grjsR/8RWxkciuCnTlDNPisCMPA8+Y+f8J3dK0ULBLbMXJwMzpzVF7zpYvGPHBbVaDRklcjMotHHnNpl5KNKbxrGSGDTtntKBy2QZ0y23uGTg029JHzU0/yCojZsPZvf0AQ7yJGcPrkbMxyCm00YOCzxks/n/d/H02k1T2J42FbxtBWINLyYEcsekfWAJ8NgCf9KiKyDGR1hI5fV/pr+AF8pnufVLtWl7XaWTj996kUUeA2zn8XXCfQeZKpylSCKjeA73iqn 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. Reviewed-by: Christoph Hellwig Reviewed-by: Dave Chinner Reviewed-by: Jan Kara # For vfs changes Signed-off-by: Michal Hocko --- fs/bcachefs/fs.c | 14 ++++++-------- fs/inode.c | 10 ++++++---- include/linux/fs.h | 7 ++++++- include/linux/security.h | 4 ++-- security/security.c | 9 +++++---- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index 4a1bb07a2574..14f50490825f 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -291,10 +291,10 @@ 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 = alloc_inode_sb(c->vfs_sb, - bch2_inode_cache, GFP_NOFS); + bch2_inode_cache, gfp); if (!inode) return NULL; @@ -306,7 +306,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; } @@ -319,12 +319,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_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); @@ -398,7 +396,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 471ae4a31549..8dabb224f941 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -146,14 +146,16 @@ static int no_open(struct inode *inode, struct file *file) } /** - * inode_init_always - perform inode structure initialisation + * inode_init_always_gfp - perform inode structure initialisation * @sb: superblock inode belongs to * @inode: inode to initialise + * @gfp: allocation flags * * These are initializations that need to be done on every inode * allocation as the fields are not initialised by slab allocation. + * If there are additional allocations required @gfp is used. */ -int inode_init_always(struct super_block *sb, struct inode *inode) +int inode_init_always_gfp(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 +232,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 eae5b67e4a15..c2d925235e6c 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3082,7 +3082,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/security.h b/include/linux/security.h index b86ec2afc691..2ec8f3014757 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -348,7 +348,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, @@ -789,7 +789,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 6875eb4a59fc..8947826cb756 100644 --- a/security/security.c +++ b/security/security.c @@ -745,14 +745,14 @@ static int lsm_file_alloc(struct file *file) * * Returns 0, or -ENOMEM if memory can't be allocated. */ -static int lsm_inode_alloc(struct inode *inode) +static 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; @@ -1678,6 +1678,7 @@ int security_path_notify(const struct path *path, u64 mask, /** * security_inode_alloc() - Allocate an inode LSM blob * @inode: the inode + * #gfp: allocation flags * * Allocate and attach a security structure to @inode->i_security. The * i_security field is initialized to NULL when the inode structure is @@ -1685,9 +1686,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 Thu Sep 26 17:11:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 13895535 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 DB7EBE7716C for ; Thu, 5 Dec 2024 15:20:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0F3BE6B00D2; Thu, 5 Dec 2024 10:19:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C86516B00DF; Thu, 5 Dec 2024 10:19:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D6D3C6B00C8; Thu, 5 Dec 2024 10:19:09 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id BBC446B00A0 for ; Thu, 26 Sep 2024 13:29:55 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 747B8A0167 for ; Thu, 26 Sep 2024 17:29:55 +0000 (UTC) X-FDA: 82607577150.11.0514AFB Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) by imf26.hostedemail.com (Postfix) with ESMTP id 7341A140012 for ; Thu, 26 Sep 2024 17:29:53 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=none; spf=pass (imf26.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.167.44 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727371731; a=rsa-sha256; cv=none; b=OmEf4AOPAgiPZFp1BaSAn/6pZGfKO02WKrXBcAgst9GfJ6Z4S6Xfyj556JnH3D7pJ44uF3 K71bqZVLuXZs4bRytJyjLNBQuXmnTPfCy0QcZ9FLtrGTKOBQyPd39MLwZT9UypStdw4YAD 9CzmTYcEZ3M8SlozlieoMTmbFnLodEQ= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=none; spf=pass (imf26.hostedemail.com: domain of mstsxfx@gmail.com designates 209.85.167.44 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727371731; 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=ffsv1LeC8EujkTx2A3lpobd+BleDrt/S6J7AA1ApFjs=; b=ZzEpuc+u9aStjSdcjrAf0v0fLLumRjoVeycbiUB4xBUqmbmuf27iRZYd6f/3ic/wfa3p5f Yban97svimbZLH144yabkJYDJNz1zimm35mwtLEOuwbz8mwjOF6/df3hPrN3V5qwtIgbRH GvLeH7eiGAec1F3g/8AR6CPKqZGFGuI= Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-5365c060f47so1514393e87.2 for ; Thu, 26 Sep 2024 10:29:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727371792; x=1727976592; 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=ffsv1LeC8EujkTx2A3lpobd+BleDrt/S6J7AA1ApFjs=; b=M6q8UcuCdBI64lRipG/zD8Z+FXkSWzUxsy/4THxbLDNEHr6cSx2j6nZuEWXGaeS/+Z NsM90L9ahbGYdjlOhMaV9tr7MXsUZMB3b0YT3+mB/gOvS14C7DlgnKSKx+fnTQ15JxkL 8XggxpkWn+QjRWu/MAKsLYORirBbspr1E6OHgpAWrSlEUQlLcYvz8zAEDTJGBpSKN2AC x9kJD4BSbLnfDP79yCTg9rRKOh6KLfae6q++x0nIb4wIvrGYA7fR+wgVLhxB8Iod6Seq UNXCGYwOk7pFHnvQRPsCPhLMmkCb3U8Pw7z/q26EfanxeK5CEqDt8bf/GKjz2eqRyqca owhQ== X-Forwarded-Encrypted: i=1; AJvYcCXo8aXF4oVJiKB0+dqnmD5C3lvhn3jrjwBgVxgmNPwFTwSJEeVtzXxOGmrfK7uUxfJ5oOpwQONKMw==@kvack.org X-Gm-Message-State: AOJu0YxTa/hcen6dMDapAErm2a9rNV9wxCzZFLWh7jLaE8jdJ9M/grHj uUMoewSmeRD0VsVGnokaMGod3NAJ7DxAiV/direA4U95mKUH+Y2pJk0ugQ== X-Google-Smtp-Source: AGHT+IEP73qgWnQxHPW9p55unyaKmqDcpa3txiiqcVP8opZtPYfXDue7QX25cqRZ3xX5ddAIs8g71w== X-Received: by 2002:a05:6512:ad2:b0:52f:89aa:c344 with SMTP id 2adb3069b0e04-5389fc3c23dmr252834e87.16.1727371791504; Thu, 26 Sep 2024 10:29:51 -0700 (PDT) Received: from localhost.localdomain (109-81-81-255.rct.o2.cz. [109.81.81.255]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c88245eb15sm145336a12.49.2024.09.26.10.29.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Sep 2024 10:29:51 -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 , "Matthew Wilcox (Oracle)" , Dave Chinner , Vlastimil Babka Subject: [PATCH 2/2] Revert "mm: introduce PF_MEMALLOC_NORECLAIM, PF_MEMALLOC_NOWARN" Date: Thu, 26 Sep 2024 19:11:51 +0200 Message-ID: <20240926172940.167084-3-mhocko@kernel.org> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20240926172940.167084-1-mhocko@kernel.org> References: <20240926172940.167084-1-mhocko@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 7341A140012 X-Stat-Signature: ohmdkwekmh13gb7rbrt81p4kecrgnb8e X-Rspam-User: X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam: Yes X-HE-Tag: 1727371793-368435 X-HE-Meta: U2FsdGVkX1+qrX6BEVJrBeJfR1yv5RQ0AP6sgIhb9/NN9qHRLt1XWy5BE4JPyB1qVwBrCf84IB0kOqGDvaYh9Emgl2ElJYNjSPZzd1KgKYAQHxVjDOmzBTWTBPBPTgvNlBHArTt+ol90RP4bSaRspMEUeACp61rbmmqc+E0rfTsxGKgfAu43DptXgQANgSXh9bEnqVgvKZurf3YHICAvqmqkLaQscs/xBs5NpUmGnyxv8QR+JzTpUcPDJGz2w95w9ANeMQbbj2ULw+dh2r8inbvNE62b3xne4KMxi+Q2KM2lOh3dlXJWFKrpyPmut0yAfXxgVFMsTnsRPfZSEiaySbanrtW9H3t/28jVOkVqVQ3g7u1P6GA3pvdUwb5YCNzFNqYEoYnR0ZwZgywE76VgetlWLn76s/iyYlNX4hMCjzepWKQ861tgO0zDjEKL+Wm+WlXG+wuoz03cE7EqNHl9itwAec2WhWRtVIePRPLrtn0pRV0df+aBUf4sECadceb8lliaqV43lCA5aG5G2AM8X0MHKC2fTyClJA08myswK85Vh/nvTz7SkMzHg6eogOuqD7EO0H/AftZ0x6vzijdoLO6C0dNUGvNBtlwJvJswwYmE/3/q9gQfztM5k5hClM1y4k309GshLQKViFA6k9/WnevbQsm+BwuX1EI/6LxtO/yDoY8E+CR9He026PLd7AgFLlIszn5p5EdwMJuzM9P7fT3205qDFAMQPID2T1nTc0w4iUZLEcH8gv15WEzwk9s9iI6cxfQXqiV6++zvUWlwb9ir7tS/bu82EDyBqAEVZS4zIJXTcPa7EmfXA5CRlvaCfgvEqnEI6Lf6W4z9GQw8ivClFobIRI0QVPuoD9mpj7BslGBklQGc1D9E9Rv5aqjwneg3IK8jkJdFqqPUh0CZvZ0WFN+5mz6RS0f27IDDNBjcV65V+ny6ms8dhqgKEjbpKtkREm9w424Su/Qy8Ta ASSsJs7A FwNybQT1aRTNr6AqpYNiVtmVFJ+J7g7anJ4lr2Xu7MQwMwxdBEieDWrmwvejxcv8CkMH6nXayPlny27DPibuLaqDCX72wXJXz7quno4F0iJ35MSvp7rOVZu44YVWaaOLbQkgIpn1QtpOLFJxI0WUXLEEPKqq4l0maREUk5d5Z8kw7MAHj0VQqQ2JV+jtYf1bPmUOP+Rby3piTk4gs7uBxfqeNiZ6CY9RZyCJDBv7W1YOrvg7udtQBnbFx0By3C8/DGbBiU4IiBmlfkZ2hQURXVcof7BUbN1korwo76m3B7ec6pYqXtDJ94xPnGOGVJ/eG+llCSiJAvnNEb7Bec2UnM3RkKfhDw90qjauCqzzCob5TZUA99S7+IouwrhvWv3vG5echWR/TIvJfamt4HVZ63vyMvhAc1T1r7/qOdR8X1SxOzfz1WNWCVSk4SgEsLuzVRbFT2VjT2yCWvZpP2eQ63cOgnd4Bi5MRMrL5n6E8APIzAMvMNrIOYLRmiq6JydyyoaPq2nqQCXw8AUgl5W9BZlceBohnKLxsxKF4FZAK2zWTR9wQMFiDCZKPKSq+ECnfhUBv9OkeYniAPnQK1IVt2Dd6YOJ7P4QC/2VdJuAq29Tpj1nWV2K/ailuJgNfAz+/HyoCf4yWHapEgPo= 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 This reverts commit eab0af905bfc3e9c05da2ca163d76a1513159aa4. There is no existing user of those flags. PF_MEMALLOC_NOWARN 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. While PF_MEMALLOC_NOWARN is not dangerous the way PF_MEMALLOC_NORECLAIM is it doesn't have any user and as Matthew has pointed out we are running out of those flags so better reclaim it without any real users. [1] https://lore.kernel.org/all/ZcM0xtlKbAOFjv5n@tiehlicka/ Reviewed-by: Matthew Wilcox (Oracle) Reviewed-by: Christoph Hellwig Reviewed-by: Dave Chinner Reviewed-by: Vlastimil Babka Signed-off-by: Michal Hocko --- include/linux/sched.h | 4 ++-- include/linux/sched/mm.h | 17 ++++------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index e6ee4258169a..449dd64ed9ac 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1681,8 +1681,8 @@ 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__00800000 0x00800000 +#define PF__HOLE__01000000 0x01000000 #define PF__HOLE__02000000 0x02000000 #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */ #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index 07bb8d4181d7..928a626725e6 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -251,25 +251,16 @@ static inline gfp_t current_gfp_context(gfp_t flags) { unsigned int pflags = READ_ONCE(current->flags); - if (unlikely(pflags & (PF_MEMALLOC_NOIO | - PF_MEMALLOC_NOFS | - PF_MEMALLOC_NORECLAIM | - PF_MEMALLOC_NOWARN | - PF_MEMALLOC_PIN))) { + if (unlikely(pflags & (PF_MEMALLOC_NOIO | PF_MEMALLOC_NOFS | PF_MEMALLOC_PIN))) { /* - * Stronger flags before weaker flags: - * NORECLAIM implies NOIO, which in turn implies NOFS + * NOIO implies both NOIO and NOFS and it is a weaker context + * so always make sure it makes precedence */ - 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; - if (pflags & PF_MEMALLOC_NOWARN) - flags |= __GFP_NOWARN; - if (pflags & PF_MEMALLOC_PIN) flags &= ~__GFP_MOVABLE; }