All of lore.kernel.org
 help / color / mirror / Atom feed
From: Muchun Song <songmuchun@bytedance.com>
To: willy@infradead.org, akpm@linux-foundation.org,
	hannes@cmpxchg.org, mhocko@kernel.org, vdavydov.dev@gmail.com,
	shakeelb@google.com, guro@fb.com, shy828301@gmail.com,
	alexs@kernel.org, richard.weiyang@gmail.com, david@fromorbit.com,
	trond.myklebust@hammerspace.com, anna.schumaker@netapp.com,
	jaegeuk@kernel.org, chao@kernel.org, kari.argillander@gmail.com
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, linux-nfs@vger.kernel.org,
	zhengqi.arch@bytedance.com, duanxiongchun@bytedance.com,
	fam.zheng@bytedance.com, smuchun@gmail.com,
	Muchun Song <songmuchun@bytedance.com>
Subject: [PATCH v4 03/17] fs: introduce alloc_inode_sb() to allocate filesystems specific inode
Date: Tue, 14 Dec 2021 00:53:28 +0800	[thread overview]
Message-ID: <20211213165342.74704-4-songmuchun@bytedance.com> (raw)
In-Reply-To: <20211213165342.74704-1-songmuchun@bytedance.com>

The allocated inode cache is supposed to be added to its memcg list_lru
which should be allocated as well in advance. That can be done by
kmem_cache_alloc_lru() which allocates object and list_lru. The file
systems is main user of it. So introduce alloc_inode_sb() to allocate
file system specific inodes and set up the inode reclaim context
properly. The file system is supposed to use alloc_inode_sb() to
allocate inodes. In the later patches, we will convert all users to the
new API.

Signed-off-by: Muchun Song <songmuchun@bytedance.com>
---
 Documentation/filesystems/porting.rst |  5 +++++
 fs/inode.c                            |  2 +-
 include/linux/fs.h                    | 11 +++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesystems/porting.rst
index bf19fd6b86e7..c9c157d7b7bb 100644
--- a/Documentation/filesystems/porting.rst
+++ b/Documentation/filesystems/porting.rst
@@ -45,6 +45,11 @@ typically between calling iget_locked() and unlocking the inode.
 
 At some point that will become mandatory.
 
+**mandatory**
+
+The foo_inode_info should always be allocated through alloc_inode_sb() rather
+than kmem_cache_alloc() or kmalloc() related.
+
 ---
 
 **mandatory**
diff --git a/fs/inode.c b/fs/inode.c
index 6b80a51129d5..dcb1e6cad201 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -234,7 +234,7 @@ static struct inode *alloc_inode(struct super_block *sb)
 	if (ops->alloc_inode)
 		inode = ops->alloc_inode(sb);
 	else
-		inode = kmem_cache_alloc(inode_cachep, GFP_KERNEL);
+		inode = alloc_inode_sb(sb, inode_cachep, GFP_KERNEL);
 
 	if (!inode)
 		return NULL;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index bbf812ce89a8..4592f00ec5e7 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -41,6 +41,7 @@
 #include <linux/stddef.h>
 #include <linux/mount.h>
 #include <linux/cred.h>
+#include <linux/slab.h>
 
 #include <asm/byteorder.h>
 #include <uapi/linux/fs.h>
@@ -3178,6 +3179,16 @@ extern void free_inode_nonrcu(struct inode *inode);
 extern int should_remove_suid(struct dentry *);
 extern int file_remove_privs(struct file *);
 
+/*
+ * This must be used for allocating filesystems specific inodes to set
+ * up the inode reclaim context correctly.
+ */
+static inline void *
+alloc_inode_sb(struct super_block *sb, struct kmem_cache *cache, gfp_t gfp)
+{
+	return kmem_cache_alloc_lru(cache, &sb->s_inode_lru, gfp);
+}
+
 extern void __insert_inode_hash(struct inode *, unsigned long hashval);
 static inline void insert_inode_hash(struct inode *inode)
 {
-- 
2.11.0


  parent reply	other threads:[~2021-12-13 16:54 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-13 16:53 [PATCH v4 00/17] Optimize list lru memory consumption Muchun Song
2021-12-13 16:53 ` [PATCH v4 01/17] mm: list_lru: optimize memory consumption of arrays of per cgroup lists Muchun Song
2021-12-14 13:38   ` Johannes Weiner
2021-12-15 12:09     ` Muchun Song
2021-12-13 16:53 ` [PATCH v4 02/17] mm: introduce kmem_cache_alloc_lru Muchun Song
2021-12-14 13:50   ` Johannes Weiner
2021-12-15 12:34     ` Muchun Song
2021-12-13 16:53 ` Muchun Song [this message]
2021-12-13 16:53 ` [PATCH v4 04/17] fs: allocate inode by using alloc_inode_sb() Muchun Song
2021-12-13 16:53 ` [PATCH v4 05/17] f2fs: " Muchun Song
2021-12-13 16:53 ` [PATCH v4 06/17] nfs42: use a specific kmem_cache to allocate nfs4_xattr_entry Muchun Song
2021-12-13 16:53 ` [PATCH v4 07/17] mm: dcache: use kmem_cache_alloc_lru() to allocate dentry Muchun Song
2021-12-13 16:53 ` [PATCH v4 08/17] xarray: use kmem_cache_alloc_lru to allocate xa_node Muchun Song
2021-12-13 16:53 ` [PATCH v4 09/17] mm: workingset: use xas_set_lru() to pass shadow_nodes Muchun Song
2021-12-14 14:09   ` Johannes Weiner
2021-12-15 12:36     ` Muchun Song
2021-12-13 16:53 ` [PATCH v4 10/17] mm: memcontrol: move memcg_online_kmem() to mem_cgroup_css_online() Muchun Song
2021-12-13 16:53 ` [PATCH v4 11/17] mm: list_lru: allocate list_lru_one only when needed Muchun Song
2021-12-16 13:01   ` [mm] 86cda95957: BUG:sleeping_function_called_from_invalid_context_at_include/linux/sched/mm.h kernel test robot
2021-12-16 13:01     ` kernel test robot
2021-12-16 14:56     ` [External] " Muchun Song
2021-12-16 14:56       ` Muchun Song
2021-12-13 16:53 ` [PATCH v4 12/17] mm: list_lru: rename memcg_drain_all_list_lrus to memcg_reparent_list_lrus Muchun Song
2021-12-13 16:53 ` [PATCH v4 13/17] mm: list_lru: replace linear array with xarray Muchun Song
2021-12-13 16:53 ` [PATCH v4 14/17] mm: memcontrol: reuse memory cgroup ID for kmem ID Muchun Song
2021-12-13 16:53 ` [PATCH v4 15/17] mm: memcontrol: fix cannot alloc the maximum memcg ID Muchun Song
2021-12-13 16:53 ` [PATCH v4 16/17] mm: list_lru: rename list_lru_per_memcg to list_lru_memcg Muchun Song
2021-12-13 16:53 ` [PATCH v4 17/17] mm: memcontrol: rename memcg_cache_id to memcg_kmem_id Muchun Song
2021-12-17 10:05 ` [PATCH v4 00/17] Optimize list lru memory consumption xiaoqiang zhao
2021-12-17 11:06   ` Muchun Song
2021-12-17 13:12   ` Matthew Wilcox
2021-12-19  9:58     ` xiaoqiang zhao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211213165342.74704-4-songmuchun@bytedance.com \
    --to=songmuchun@bytedance.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexs@kernel.org \
    --cc=anna.schumaker@netapp.com \
    --cc=chao@kernel.org \
    --cc=david@fromorbit.com \
    --cc=duanxiongchun@bytedance.com \
    --cc=fam.zheng@bytedance.com \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=jaegeuk@kernel.org \
    --cc=kari.argillander@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=mhocko@kernel.org \
    --cc=richard.weiyang@gmail.com \
    --cc=shakeelb@google.com \
    --cc=shy828301@gmail.com \
    --cc=smuchun@gmail.com \
    --cc=trond.myklebust@hammerspace.com \
    --cc=vdavydov.dev@gmail.com \
    --cc=willy@infradead.org \
    --cc=zhengqi.arch@bytedance.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.