From nobody Thu Apr 2 12:33:37 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 41F621F5858 for ; Sat, 28 Mar 2026 17:37:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774719456; cv=none; b=m8aDu+lO087Tw6YcQl7ZKQtVzvO2n9H/te2sowMcx5UAIVo5YUqZVdrmnF8YSAHmt8VQt9FOpXjY7oj27IkHMGlUIw0RMCHzGpYFc/NDe4+Zorjn+PLMCu9I0gtZ6txSOo/KzvkEWXV5x2SlnjJy7RTdaZWfBHgfLkVSYfot1r8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774719456; c=relaxed/simple; bh=saITh143n5goVoqxHFf64RaqseXoQz5ztjuI1873DXY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=c5P/VsKhRJ2vzTx2+ThnvCziE6z29S4yJxEld/E3Y0cvGEARMaiGxphFIwPNuc57vZKJOI5LKVUMoxAYO+RZTUsQ7d2Dv2tnlBbVF3P4xtMwNKsq5r8jniPngy67t5kqYh9pmXbmUImu7XnDoG074DRXSh9gBMLH3fBrFrqc2o4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G0ctgQz6; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G0ctgQz6" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-486ff201041so29916505e9.1 for ; Sat, 28 Mar 2026 10:37:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774719454; x=1775324254; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=+GiqKUzuLjWLwvp2WlBTPs4nhbibVGRU86wxjVFSVmM=; b=G0ctgQz6axvS/BjCXb/GT1y6cQPeKAKHcnL0C0wvFKkW//4SO041XlX+10elABKV7x YFUhsGwiXesa1SxY/Q8r13J424sQdavoI0rvahkwIx5IavsrLt7ADDoEVGhRiOakKAiB xiNsXaqoMjsMIO5ywldlx807OaWqCuKhlpIIK30AnffYX6YrTOTYdqmCS9WhHhMuWCH+ pwPmrUhFDH69dabhtiCRkMaXB2UMipgOTqJvnaOZVUhZb+K7YZHYwzvbItp1LRBMnM4C yAZuyBtir8mpzoLxP8auCH2+LjyfObyLMvmyOaxDGhMbAUEL7E341UN9Ln5nUXGyM7fU dG2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774719454; x=1775324254; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=+GiqKUzuLjWLwvp2WlBTPs4nhbibVGRU86wxjVFSVmM=; b=H1Jf33A0laCtzHPoJmYtb0HvXfFFc5XXNDrNql+brlcyaa/FXv54ftVkcCdYgDV8tz ZEO2+cO/3RjIAMDfV3hwDnaOOAp4pKI+rwgAqRCMqEEt0Rhy6rUhHzVVuq/igxpYpr81 LmO7GJoVVqdfy8uor3lnENHpU+JVGsr7HCnle/yuxC+50MI3WRSovy8tE4nlwJ9G4a2c B9M2oZJFIXIUlhIlGkE3K4Y2Csq9a/uzHvFuzeItsrnewOU7LsfDolWQyr+hQGjoV52x 9zmaDPaLwF90vw5MIJNlcxGQgV5TQrXM5Nh3K8610zeW7T1mlfcLIkJlI0sZ20+xcnt5 eYbQ== X-Forwarded-Encrypted: i=1; AJvYcCUKEIB8m4lvP2FOTZvLLSIFZlw2ZZyjDHpZJM0q4M2aF3n5psUGS2fYOP//ltOhMSekb6/dgTx2PL0ziPo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz06IwloHfqzmIfDSy7so6qQogjuuZtIdnMEA+BnIDt0ak1/Moe kBoof3b49baCUAfQ+0EmpwtF2jAeH97hCqymjkMI5z8qEkvfhcfmgo+3 X-Gm-Gg: ATEYQzzonLpNHLfyZh7vxJVCg6dU0J1+NC4nNyuaD+qdCIhR/iOYWQL3ii/YQRhqrro WI1zWHhDttlW80tpru6UMAylxYogDu1Sk/wEFy+l+y6LbJmqkN8ncbqjfq3apBB0vkY8j7kSrxB V4QnhlpiDtP4cthx5IJpgaW3v+fAkpCOpETAvFTyyLZNMP/0PqABqs/OJqeY6AkBJs84Br97soj 3sEf9ThmH4WxhQOpaSYVLVDYDjdSn4LmUYmfF8BNj7pcVmqURYh8sDwsHwHR8tLwakiTf4a0of5 ChgqmNcWzjn0pPcesGMvKL5cuor0ktIv/WwNXOTGu4Mo0PRYSHbSqRjXVEIfSJ+TVMnMt4mahx3 ph5DdxNsur6NoCiiJ/9VlyPEEpdgLJ3+yhrGkrTA//eRelePOBbVyIslw+8oUIuy0iq41dhOFPT KvsDJ2u388UBlW4B7l3KyjbNu4XUkFLfdLf50gMgd+srk40YC9nD5rua+UIXayQg8cZkqzR+Wtc Q== X-Received: by 2002:a05:600c:3505:b0:485:4135:5c92 with SMTP id 5b1f17b1804b1-48727c7c6e0mr101567555e9.0.1774719453499; Sat, 28 Mar 2026 10:37:33 -0700 (PDT) Received: from f.. (cst-prg-89-171.cust.vodafone.cz. [46.135.89.171]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48722be608bsm226605195e9.0.2026.03.28.10.37.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 Mar 2026 10:37:32 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Mateusz Guzik Subject: [PATCH] fs: hide file and bfile caches behind runtime const machinery Date: Sat, 28 Mar 2026 18:37:28 +0100 Message-ID: <20260328173728.3388070-1-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" s/cachep/cache/ for consistency with namei and dentry caches. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- fs/file.c | 2 +- fs/file_table.c | 31 +++++++++++++++++++------------ include/asm-generic/vmlinux.lds.h | 4 +++- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/fs/file.c b/fs/file.c index 384c83ce768d..2c81c0b162d0 100644 --- a/fs/file.c +++ b/fs/file.c @@ -200,7 +200,7 @@ static struct fdtable *alloc_fdtable(unsigned int slots= _wanted) /* * Check if the allocation size would exceed INT_MAX. kvmalloc_array() * and kvmalloc() will warn if the allocation size is greater than - * INT_MAX, as filp_cachep objects are not __GFP_NOWARN. + * INT_MAX, as filp_cache objects are not __GFP_NOWARN. * * This can happen when sysctl_nr_open is set to a very high value and * a process tries to use a file descriptor near that limit. For example, diff --git a/fs/file_table.c b/fs/file_table.c index aaa5faaace1e..c40ec1be2899 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -30,6 +30,8 @@ =20 #include =20 +#include + #include "internal.h" =20 /* sysctl tunables... */ @@ -38,8 +40,10 @@ static struct files_stat_struct files_stat =3D { }; =20 /* SLAB cache for file structures */ -static struct kmem_cache *filp_cachep __ro_after_init; -static struct kmem_cache *bfilp_cachep __ro_after_init; +static struct kmem_cache *__filp_cache __ro_after_init; +#define filp_cache runtime_const_ptr(__filp_cache) +static struct kmem_cache *__bfilp_cache __ro_after_init; +#define bfilp_cache runtime_const_ptr(__bfilp_cache) =20 static struct percpu_counter nr_files __cacheline_aligned_in_smp; =20 @@ -74,9 +78,9 @@ static inline void file_free(struct file *f) put_cred(f->f_cred); if (unlikely(f->f_mode & FMODE_BACKING)) { path_put(backing_file_user_path(f)); - kmem_cache_free(bfilp_cachep, backing_file(f)); + kmem_cache_free(bfilp_cache, backing_file(f)); } else { - kmem_cache_free(filp_cachep, f); + kmem_cache_free(filp_cache, f); } } =20 @@ -234,13 +238,13 @@ struct file *alloc_empty_file(int flags, const struct= cred *cred) goto over; } =20 - f =3D kmem_cache_alloc(filp_cachep, GFP_KERNEL); + f =3D kmem_cache_alloc(filp_cache, GFP_KERNEL); if (unlikely(!f)) return ERR_PTR(-ENOMEM); =20 error =3D init_file(f, flags, cred); if (unlikely(error)) { - kmem_cache_free(filp_cachep, f); + kmem_cache_free(filp_cache, f); return ERR_PTR(error); } =20 @@ -268,13 +272,13 @@ struct file *alloc_empty_file_noaccount(int flags, co= nst struct cred *cred) struct file *f; int error; =20 - f =3D kmem_cache_alloc(filp_cachep, GFP_KERNEL); + f =3D kmem_cache_alloc(filp_cache, GFP_KERNEL); if (unlikely(!f)) return ERR_PTR(-ENOMEM); =20 error =3D init_file(f, flags, cred); if (unlikely(error)) { - kmem_cache_free(filp_cachep, f); + kmem_cache_free(filp_cache, f); return ERR_PTR(error); } =20 @@ -295,13 +299,13 @@ struct file *alloc_empty_backing_file(int flags, cons= t struct cred *cred) struct backing_file *ff; int error; =20 - ff =3D kmem_cache_alloc(bfilp_cachep, GFP_KERNEL); + ff =3D kmem_cache_alloc(bfilp_cache, GFP_KERNEL); if (unlikely(!ff)) return ERR_PTR(-ENOMEM); =20 error =3D init_file(&ff->file, flags, cred); if (unlikely(error)) { - kmem_cache_free(bfilp_cachep, ff); + kmem_cache_free(bfilp_cache, ff); return ERR_PTR(error); } =20 @@ -593,14 +597,17 @@ void __init files_init(void) .freeptr_offset =3D offsetof(struct file, f_freeptr), }; =20 - filp_cachep =3D kmem_cache_create("filp", sizeof(struct file), &args, + __filp_cache =3D kmem_cache_create("filp", sizeof(struct file), &args, SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_ACCOUNT | SLAB_TYPESAFE_BY_RCU); + runtime_const_init(ptr, __filp_cache); =20 args.freeptr_offset =3D offsetof(struct backing_file, bf_freeptr); - bfilp_cachep =3D kmem_cache_create("bfilp", sizeof(struct backing_file), + __bfilp_cache =3D kmem_cache_create("bfilp", sizeof(struct backing_file), &args, SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_ACCOUNT | SLAB_TYPESAFE_BY_RCU); + runtime_const_init(ptr, __bfilp_cache); + percpu_counter_init(&nr_files, 0, GFP_KERNEL); } =20 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index 1e1580febe4b..4f8e734c4336 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -975,7 +975,9 @@ RUNTIME_CONST(shift, d_hash_shift) \ RUNTIME_CONST(ptr, dentry_hashtable) \ RUNTIME_CONST(ptr, __dentry_cache) \ - RUNTIME_CONST(ptr, __names_cache) + RUNTIME_CONST(ptr, __names_cache) \ + RUNTIME_CONST(ptr, __filp_cache) \ + RUNTIME_CONST(ptr, __bfilp_cache) =20 /* Alignment must be consistent with (kunit_suite *) in include/kunit/test= .h */ #define KUNIT_TABLE() \ --=20 2.48.1