Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp991138imm; Wed, 1 Aug 2018 08:28:10 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfWb8he0nC9ZkT1CO0tB2iLLqgrpl4aJGv3UIQYiZLt1AEoxVCZZFKZT7zhu+egtbllhecD X-Received: by 2002:a63:7252:: with SMTP id c18-v6mr24442508pgn.186.1533137290039; Wed, 01 Aug 2018 08:28:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533137290; cv=none; d=google.com; s=arc-20160816; b=SitM/Cd9o08LyxSeYZKVyjtvpUt5BUsuSycUr5pBXfrLp273OJaru3aQDEit5dyY8G 6PD+IiyeK8LeVXWNKQ6Kcb5NvyksBitvNR6pwncQ8dDFh+4lsyiaMPujcK7PqVuOTUWc fu71/ee8fHEitUdFmgkuPQ8oQXj/JzSz5xTGXSmK8beRc3jt+1lxXK1TDPbfIJI4SmPb 3hmy2ZEAOm6dX8GLs3fSRJpqHW1ZGO4iOanLYUC8yhaA0Nka9522XQoZFe6z7b7xnUHw xaoOI+rtZTGYxAu2BGUte38ExvPWkDqi7NVnR9/XdIiPwrRlCghzOKCrI/MKpiDjDR1S Qmjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:organization:arc-authentication-results; bh=7FBYSpNss1tEy6IVrjLmidkPHsJ5e5/FmHnPE+NGONo=; b=Qqmh3j8FOoAEBVk6TTjGC1kHpb7TXZL42vKmPKfqPylYvhx43ZJdNsFqsqpE4SCrRj FeUqMemFWYMWsLKqxm6IRPBENEGc2AHXGzOESO8SvVfrImOk4abshXQ3FicCBpfGb4LU rzDhNXVAOjBp9OUxXWllzYBXW1kS+CCHXFX5dBzijgjI8Wm8XZZ5P8N0TVOwdH/pv/Cs 6wq2jK3X9R2jUV3qRn8GilrwuW2ChKyB0cXTMRECKImnNaasloBEde7KsuezVUwq8NJ4 Zx1ADYV66c8/KLL35PBXAMfLd3RVGJjCiZqNGMS9cWl8q9DADsi4pewPOaeFzqKKWcKB QZPw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 199-v6si18295378pfv.114.2018.08.01.08.27.55; Wed, 01 Aug 2018 08:28:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390075AbeHARMb (ORCPT + 99 others); Wed, 1 Aug 2018 13:12:31 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:58660 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389690AbeHARMa (ORCPT ); Wed, 1 Aug 2018 13:12:30 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 36FC9F2B37; Wed, 1 Aug 2018 15:26:16 +0000 (UTC) Received: from warthog.procyon.org.uk (ovpn-120-116.rdu2.redhat.com [10.10.120.116]) by smtp.corp.redhat.com (Postfix) with ESMTP id 763522026D68; Wed, 1 Aug 2018 15:26:15 +0000 (UTC) Organization: Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 3798903 Subject: [PATCH 19/33] cpuset: Use fs_context [ver #11] From: David Howells To: viro@zeniv.linux.org.uk Cc: Tejun Heo , torvalds@linux-foundation.org, dhowells@redhat.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Date: Wed, 01 Aug 2018 16:26:15 +0100 Message-ID: <153313717500.13253.3806212563896771972.stgit@warthog.procyon.org.uk> In-Reply-To: <153313703562.13253.5766498657900728120.stgit@warthog.procyon.org.uk> References: <153313703562.13253.5766498657900728120.stgit@warthog.procyon.org.uk> User-Agent: StGit/unknown-version MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Wed, 01 Aug 2018 15:26:16 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Wed, 01 Aug 2018 15:26:16 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'dhowells@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Make the cpuset filesystem use the filesystem context. This is potentially tricky as the cpuset fs is almost an alias for the cgroup filesystem, but with some special parameters. This can, however, be handled by setting up an appropriate cgroup filesystem and returning the root directory of that as the root dir of this one. Signed-off-by: David Howells cc: Tejun Heo --- kernel/cgroup/cpuset.c | 66 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 14 deletions(-) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 6d9f1a709af9..e6582b2f5144 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include #include @@ -315,26 +315,64 @@ static inline bool is_in_v2_mode(void) * users. If someone tries to mount the "cpuset" filesystem, we * silently switch it to mount "cgroup" instead */ -static struct dentry *cpuset_mount(struct file_system_type *fs_type, - int flags, const char *unused_dev_name, - void *data, size_t data_size) +static int cpuset_get_tree(struct fs_context *fc) { - struct file_system_type *cgroup_fs = get_fs_type("cgroup"); - struct dentry *ret = ERR_PTR(-ENODEV); + static const char opts[] = "cpuset,noprefix,release_agent=/sbin/cpuset_release_agent"; + struct file_system_type *cgroup_fs; + struct fs_context *cg_fc; + char *p; + int ret = -ENODEV; + + cgroup_fs = get_fs_type("cgroup"); if (cgroup_fs) { - char mountopts[] = - "cpuset,noprefix," - "release_agent=/sbin/cpuset_release_agent"; - ret = cgroup_fs->mount(cgroup_fs, flags, unused_dev_name, - mountopts, data_size); - put_filesystem(cgroup_fs); + ret = PTR_ERR(cgroup_fs); + goto out; + } + + cg_fc = vfs_new_fs_context(cgroup_fs, NULL, fc->sb_flags, fc->purpose); + put_filesystem(cgroup_fs); + if (IS_ERR(cg_fc)) { + ret = PTR_ERR(cg_fc); + goto out; } + + ret = -ENOMEM; + p = kstrdup(opts, GFP_KERNEL); + if (!p) + goto out_fc; + + ret = generic_parse_monolithic(fc, p, sizeof(opts) - 1); + kfree(p); + if (ret < 0) + goto out_fc; + + ret = vfs_get_tree(cg_fc); + if (ret < 0) + goto out_fc; + + fc->root = dget(cg_fc->root); + ret = 0; + +out_fc: + put_fs_context(cg_fc); +out: return ret; } +static const struct fs_context_operations cpuset_fs_context_ops = { + .get_tree = cpuset_get_tree, +}; + +static int cpuset_init_fs_context(struct fs_context *fc, + struct dentry *reference) +{ + fc->ops = &cpuset_fs_context_ops; + return 0; +} + static struct file_system_type cpuset_fs_type = { - .name = "cpuset", - .mount = cpuset_mount, + .name = "cpuset", + .init_fs_context = cpuset_init_fs_context, }; /*