[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <34e2eabbef5916c784dc16856ce25b3967f9b405.1656531090.git.khalid.aziz@oracle.com>
Date: Wed, 29 Jun 2022 16:53:53 -0600
From: Khalid Aziz <khalid.aziz@...cle.com>
To: akpm@...ux-foundation.org, willy@...radead.org
Cc: Khalid Aziz <khalid.aziz@...cle.com>, aneesh.kumar@...ux.ibm.com,
arnd@...db.de, 21cnbao@...il.com, corbet@....net,
dave.hansen@...ux.intel.com, david@...hat.com,
ebiederm@...ssion.com, hagen@...u.net, jack@...e.cz,
keescook@...omium.org, kirill@...temov.name, kucharsk@...il.com,
linkinjeon@...nel.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
longpeng2@...wei.com, luto@...nel.org, markhemm@...glemail.com,
pcc@...gle.com, rppt@...nel.org, sieberf@...zon.com,
sjpark@...zon.de, surenb@...gle.com, tst@...oebel-theuer.de,
yzaikin@...gle.com
Subject: [PATCH v2 2/9] mm/mshare: pre-populate msharefs with information file
Users of mshare feature to share page tables need to know the size
and alignment requirement for shared regions. Pre-populate msharefs
with a file, mshare_info, that provides this information.
Signed-off-by: Khalid Aziz <khalid.aziz@...cle.com>
---
mm/mshare.c | 62 +++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 14 deletions(-)
diff --git a/mm/mshare.c b/mm/mshare.c
index c8fab3869bab..3e448e11c742 100644
--- a/mm/mshare.c
+++ b/mm/mshare.c
@@ -25,8 +25,8 @@
static struct super_block *msharefs_sb;
static const struct file_operations msharefs_file_operations = {
- .open = simple_open,
- .llseek = no_llseek,
+ .open = simple_open,
+ .llseek = no_llseek,
};
static int
@@ -42,23 +42,52 @@ msharefs_d_hash(const struct dentry *dentry, struct qstr *qstr)
return 0;
}
+static void
+mshare_evict_inode(struct inode *inode)
+{
+ clear_inode(inode);
+}
+
static const struct dentry_operations msharefs_d_ops = {
.d_hash = msharefs_d_hash,
};
+static ssize_t
+mshare_info_read(struct file *file, char __user *buf, size_t nbytes,
+ loff_t *ppos)
+{
+ char s[80];
+
+ sprintf(s, "%ld", PGDIR_SIZE);
+ return simple_read_from_buffer(buf, nbytes, ppos, s, strlen(s));
+}
+
+static const struct file_operations mshare_info_ops = {
+ .read = mshare_info_read,
+ .llseek = noop_llseek,
+};
+
+static const struct super_operations mshare_s_ops = {
+ .statfs = simple_statfs,
+ .evict_inode = mshare_evict_inode,
+};
+
static int
msharefs_fill_super(struct super_block *sb, struct fs_context *fc)
{
- static const struct tree_descr empty_descr = {""};
+ static const struct tree_descr mshare_files[] = {
+ [2] = { "mshare_info", &mshare_info_ops, 0444},
+ {""},
+ };
int err;
- sb->s_d_op = &msharefs_d_ops;
- err = simple_fill_super(sb, MSHARE_MAGIC, &empty_descr);
- if (err)
- return err;
-
- msharefs_sb = sb;
- return 0;
+ err = simple_fill_super(sb, MSHARE_MAGIC, mshare_files);
+ if (!err) {
+ msharefs_sb = sb;
+ sb->s_d_op = &msharefs_d_ops;
+ sb->s_op = &mshare_s_ops;
+ }
+ return err;
}
static int
@@ -84,20 +113,25 @@ static struct file_system_type mshare_fs = {
.kill_sb = kill_litter_super,
};
-static int
+static int __init
mshare_init(void)
{
int ret = 0;
ret = sysfs_create_mount_point(fs_kobj, "mshare");
if (ret)
- return ret;
+ goto out;
ret = register_filesystem(&mshare_fs);
- if (ret)
+ if (ret) {
sysfs_remove_mount_point(fs_kobj, "mshare");
+ goto out;
+ }
+
+ return 0;
+out:
return ret;
}
-fs_initcall(mshare_init);
+core_initcall(mshare_init);
--
2.32.0
Powered by blists - more mailing lists