From: David Howells <dhowells@redhat.com>
To: mszeredi@redhat.com, viro@zeniv.linux.org.uk
Cc: dhowells@redhat.com, linux-nfs@vger.kernel.org,
jlayton@redhat.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-security-module@vger.kernel.org,
Li Zefan <lizefan@huawei.com>,
Johannes Weiner <hannes@cmpxchg.org>, Tejun Heo <tj@kernel.org>,
cgroups@vger.kernel.org, fenghua.yu@intel.com
Subject: Re: [PATCH 27/27] ... and the intel_rdt driver
Date: Wed, 14 Jun 2017 23:31:36 +0100 [thread overview]
Message-ID: <10464.1497479496@warthog.procyon.org.uk> (raw)
In-Reply-To: <149745355907.10897.10073768158664960494.stgit@warthog.procyon.org.uk>
This also needs the attached addition to fix the intel_rdt driver.
David
---
diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
index f5af0cc7eb0d..d026701894fd 100644
--- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
+++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
@@ -35,6 +35,11 @@
#include <asm/intel_rdt.h>
#include <asm/intel_rdt_common.h>
+struct rdt_fs_context {
+ struct kernfs_fs_context kfc;
+ bool enable_cdp;
+};
+
DEFINE_STATIC_KEY_FALSE(rdt_enable_key);
struct kernfs_root *rdt_root;
struct rdtgroup rdtgroup_default;
@@ -743,22 +748,6 @@ static void cdp_disable(void)
}
}
-static int parse_rdtgroupfs_options(char *data)
-{
- char *token, *o = data;
- int ret = 0;
-
- while ((token = strsep(&o, ",")) != NULL) {
- if (!*token)
- return -EINVAL;
-
- if (!strcmp(token, "cdp"))
- ret = cdp_enable();
- }
-
- return ret;
-}
-
/*
* We don't allow rdtgroup directories to be created anywhere
* except the root directory. Thus when looking for the rdtgroup
@@ -823,11 +812,9 @@ void rdtgroup_kn_unlock(struct kernfs_node *kn)
}
}
-static struct dentry *rdt_mount(struct file_system_type *fs_type,
- int flags, const char *unused_dev_name,
- void *data)
+static int rdt_get_tree(struct fs_context *fc)
{
- struct dentry *dentry;
+ struct rdt_fs_context *ctx = container_of(fc, struct rdt_fs_context, kfc.fc);
int ret;
mutex_lock(&rdtgroup_mutex);
@@ -835,27 +822,25 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,
* resctrl file system can only be mounted once.
*/
if (static_branch_unlikely(&rdt_enable_key)) {
- dentry = ERR_PTR(-EBUSY);
+ errorf("intel_rdt: Can only mount once");
+ ret = -EBUSY;
goto out;
}
- ret = parse_rdtgroupfs_options(data);
- if (ret) {
- dentry = ERR_PTR(ret);
- goto out_cdp;
+ if (ctx->enable_cdp) {
+ ret = cdp_enable();
+ if (ret < 0)
+ goto out_cdp;
}
closid_init();
ret = rdtgroup_create_info_dir(rdtgroup_default.kn);
- if (ret) {
- dentry = ERR_PTR(ret);
+ if (ret < 0)
goto out_cdp;
- }
- dentry = kernfs_mount(fs_type, flags, rdt_root,
- RDTGROUP_SUPER_MAGIC, NULL);
- if (IS_ERR(dentry))
+ ret = kernfs_get_tree(&ctx->kfc);
+ if (ret < 0)
goto out_cdp;
static_branch_enable(&rdt_enable_key);
@@ -865,8 +850,42 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,
cdp_disable();
out:
mutex_unlock(&rdtgroup_mutex);
+ return ret;
+}
+
+static int rdt_parse_option(struct fs_context *fc, char *p)
+{
+ struct rdt_fs_context *ctx = container_of(fc, struct rdt_fs_context, kfc.fc);
- return dentry;
+ if (strcmp(p, "cdp") == 0) {
+ ctx->enable_cdp = true;
+ return 0;
+ }
+
+ return invalf("intel_rdt: Unknown option");
+}
+
+static void rdt_fs_context_free(struct fs_context *fc)
+{
+ struct rdt_fs_context *ctx = container_of(fc, struct rdt_fs_context, kfc.fc);
+
+ kernfs_free_fs_context(&ctx->kfc);
+}
+
+static const struct fs_context_operations rdt_fs_context_ops = {
+ .free = rdt_fs_context_free,
+ .parse_option = rdt_parse_option,
+ .get_tree = rdt_get_tree,
+};
+
+static int rdt_init_fs_context(struct fs_context *fc, struct super_block *src_sb)
+{
+ struct rdt_fs_context *ctx = container_of(fc, struct rdt_fs_context, kfc.fc);
+
+ ctx->kfc.root = rdt_root;
+ ctx->kfc.magic = RDTGROUP_SUPER_MAGIC;
+ ctx->kfc.fc.ops = &rdt_fs_context_ops;
+ return 0;
}
static int reset_all_ctrls(struct rdt_resource *r)
@@ -994,9 +1013,10 @@ static void rdt_kill_sb(struct super_block *sb)
}
static struct file_system_type rdt_fs_type = {
- .name = "resctrl",
- .mount = rdt_mount,
- .kill_sb = rdt_kill_sb,
+ .name = "resctrl",
+ .fs_context_size = sizeof(struct rdt_fs_context),
+ .init_fs_context = rdt_init_fs_context,
+ .kill_sb = rdt_kill_sb,
};
static int rdtgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
prev parent reply other threads:[~2017-06-14 22:31 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-14 15:15 [RFC][PATCH 00/27] VFS: Introduce filesystem context [ver #5] David Howells
2017-06-14 15:15 ` [PATCH 01/27] Provide a function to create a NUL-terminated string from unterminated data " David Howells
2017-06-14 15:15 ` [PATCH 02/27] VFS: Clean up whitespace in fs/namespace.c and fs/super.c " David Howells
2017-06-14 15:15 ` [PATCH 03/27] VFS: Make get_mnt_ns() return the namespace " David Howells
2017-06-15 9:09 ` Al Viro
2017-06-14 15:15 ` [PATCH 04/27] VFS: Make get_filesystem() return the affected filesystem " David Howells
2017-06-14 15:16 ` [PATCH 05/27] VFS: Provide empty name qstr " David Howells
2017-06-14 15:16 ` [PATCH 06/27] Provide supplementary error message facility " David Howells
2017-08-18 3:09 ` Kim Phillips
2017-06-14 15:16 ` [PATCH 07/27] VFS: Differentiate mount flags (MS_*) from internal superblock flags " David Howells
2017-06-15 9:39 ` Al Viro
2017-06-16 9:06 ` Christoph Hellwig
2017-06-16 14:53 ` David Howells
2017-06-16 15:49 ` Christoph Hellwig
2017-06-16 15:54 ` David Howells
2017-06-14 15:16 ` [PATCH 08/27] VFS: Introduce the structs and doc for a filesystem context " David Howells
2017-06-14 18:02 ` Randy Dunlap
2017-06-14 22:58 ` Updated docs David Howells
2017-06-15 1:53 ` Randy Dunlap
2017-06-14 20:03 ` [PATCH 08/27] VFS: Introduce the structs and doc for a filesystem context [ver #5] Casey Schaufler
2017-06-14 20:42 ` David Howells
2017-06-14 20:53 ` Casey Schaufler
2017-06-17 9:57 ` Theodore Ts'o
2017-06-17 14:18 ` David Howells
2017-06-17 14:56 ` Jeff Layton
2017-06-17 15:11 ` Randy Dunlap
2017-06-19 7:47 ` David Howells
2017-06-14 15:16 ` [PATCH 09/27] VFS: Add LSM hooks for " David Howells
2017-06-14 15:16 ` [PATCH 10/27] VFS: Implement a filesystem superblock creation/configuration " David Howells
2017-06-14 15:17 ` [PATCH 11/27] VFS: Remove unused code after filesystem context changes " David Howells
2017-06-14 15:17 ` [PATCH 12/27] VFS: Implement fsopen() to prepare for a mount " David Howells
2017-06-14 15:17 ` [PATCH 13/27] VFS: Implement fsmount() to effect a pre-configured " David Howells
2017-06-14 15:17 ` [PATCH 14/27] VFS: Add a sample program for fsopen/fsmount " David Howells
2017-06-14 15:17 ` [PATCH 15/27] procfs: Move proc_fill_super() to fs/proc/root.c " David Howells
2017-06-14 15:17 ` [PATCH 16/27] proc: Add fs_context support to procfs " David Howells
2017-06-15 10:14 ` Al Viro
2017-06-14 15:17 ` [PATCH 17/27] NFS: Move mount parameterisation bits into their own file " David Howells
2017-06-14 15:18 ` [PATCH 18/27] NFS: Constify mount argument match tables " David Howells
2017-06-14 15:18 ` [PATCH 19/27] NFS: Rename struct nfs_parsed_mount_data to struct nfs_fs_context " David Howells
2017-06-14 15:18 ` [PATCH 20/27] NFS: Split nfs_parse_mount_options() " David Howells
2017-06-14 15:18 ` [PATCH 21/27] NFS: Deindent nfs_fs_context_parse_option() " David Howells
2017-06-14 15:18 ` [PATCH 22/27] NFS: Add a small buffer in nfs_fs_context to avoid string dup " David Howells
2017-06-14 15:18 ` [PATCH 23/27] NFS: Do some tidying of the parsing code " David Howells
2017-06-14 15:18 ` [PATCH 24/27] NFS: Add fs_context support. " David Howells
2017-06-15 15:28 ` Anna Schumaker
2017-06-14 15:19 ` [PATCH 25/27] ipc: Convert mqueue fs to fs_context " David Howells
2017-06-15 10:07 ` Al Viro
2017-06-15 14:47 ` David Howells
2017-06-14 15:19 ` [PATCH 26/27] cpuset: Use " David Howells
2017-06-14 15:19 ` [PATCH 27/27] kernfs, sysfs, cgroup: Support " David Howells
2017-06-14 17:54 ` Tejun Heo
2017-06-23 15:29 ` David Howells
2017-06-14 22:31 ` David Howells [this message]
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=10464.1497479496@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=cgroups@vger.kernel.org \
--cc=fenghua.yu@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hannes@cmpxchg.org \
--cc=jlayton@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=mszeredi@redhat.com \
--cc=tj@kernel.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox