Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp16755imm; Fri, 21 Sep 2018 09:34:26 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZu5KURTC2P2215ujNlCJa1AO76KO0XK23nP6OBwESFTSstZT3DnCO1XqBWVJSXXE4arz7v X-Received: by 2002:a65:4384:: with SMTP id m4-v6mr42094659pgp.265.1537547666047; Fri, 21 Sep 2018 09:34:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537547666; cv=none; d=google.com; s=arc-20160816; b=BXwexlP3WgyogjOZia7c51WKk+ma5g1d9Av9yQZA8RmfhNHG6kN9EpiYg8NOQa89eJ 9yDlRJjw05LVua25DaX5EoJA55HfIXpg+/24IiL/iKpoh6qHN6f6lbVsArUgVw/aT+gP kIKsSOtdKSvL0US+9lNyg8GxVooqpNrx9KUmHP1Cx1fbhB5Nf+7Kqe3xdgKpaJyzvsac aiS0iJOCWfrRYvh/GhHeTurPYTSHVo0kDkMd9e6JVKbysg7ymHhUPAOdhP0e0gchlK1M tGWCSvbqTwRcEcaLcG9YwAdZLco3UWkIZaUedc77wAEOVb7jizpx4nuuXsHuPKNIZmE3 ejbA== 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; bh=L/JTlq5M5CZlEdpmTwo9+nKZuS5a2n9qAah2QuPE2Fo=; b=COna16OZloGUssoriOlUM/T0Ygi8A6ZBRPt7gogDEDDb9TSWoSxCPpSJ381UDZxwKx Qf2jVEsqjjuoQKCDf/k/3vmVeJPShUPph7ZFrw618s7oia3INP+Eu9MgLPRppfCgebDo XqthUpGVimA+32FckGbbajljKRc8uxzOynS5BdaqE8++PIMCgC48lM8r5KzeAEghbqIS FEQO4MHFYJ/1d5kY+lXnJA4ZCuQdGCdxtb+lGRBlBhhBlSHcL05jzt7WfwlCN6Q/qYu4 uPx589TP1zchHuC9//QYQqV8LHTdgrmd6r9YrEHcl57RoHPmHdyWZ0m7rifMSIFyUlUg zs0w== 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 t2-v6si26672469pge.64.2018.09.21.09.34.10; Fri, 21 Sep 2018 09:34:26 -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 S2391069AbeIUWWg (ORCPT + 99 others); Fri, 21 Sep 2018 18:22:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49534 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390638AbeIUWWf (ORCPT ); Fri, 21 Sep 2018 18:22:35 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AF23CE89B; Fri, 21 Sep 2018 16:32:56 +0000 (UTC) Received: from warthog.procyon.org.uk (ovpn-123-84.rdu2.redhat.com [10.10.123.84]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0ED6E16938; Fri, 21 Sep 2018 16:32:50 +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 20/34] cpuset: Use fs_context [ver #12] From: David Howells To: viro@zeniv.linux.org.uk Cc: Tejun Heo , torvalds@linux-foundation.org, dhowells@redhat.com, ebiederm@xmission.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, mszeredi@redhat.com Date: Fri, 21 Sep 2018 17:32:50 +0100 Message-ID: <153754757020.17872.17671307412673923587.stgit@warthog.procyon.org.uk> In-Reply-To: <153754740781.17872.7869536526927736855.stgit@warthog.procyon.org.uk> References: <153754740781.17872.7869536526927736855.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.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 21 Sep 2018 16:32:56 +0000 (UTC) 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 | 67 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 6d9f1a709af9..df78e166028c 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,65 @@ 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->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, }; /*