Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2220103imm; Tue, 10 Jul 2018 15:45:48 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfXdI699XdLVfrOWSpwsDA9YDZx6DHNT306ePiD26vrt0mzBGmPUWuqvcoMb0giIB8Hbrtb X-Received: by 2002:a17:902:381:: with SMTP id d1-v6mr26468185pld.309.1531262748834; Tue, 10 Jul 2018 15:45:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531262748; cv=none; d=google.com; s=arc-20160816; b=IbDlQPIMWu7ZnSGhAsN+EWSHIHo0m++08zOjQqz6H5Iij6uBpyfuXpsm/mkWPGw1Kh MJuRblb1Zh1SHpZgGsda1VnearVf47pD4/JSSmcE3c4WEPGvg/XxsBIqw/zYtEac46xF k3hNBplN9FAoWIwYl+GI1GVvOHd8iVQjZ2Rk1ZT9MfPzjEdXwGWstusNgMN7KWi2GyIq t+qqpMv4TQ6TA0Di70E/L0l/5VCxY8dLsN+4wUDf/VNgRqXWXcQkI25Hd5YfgKpWwI2j 3BUQC1XS0ziGBAcItXqAqO8D/UttTAIAnU6LFuVZlQqv287aSN+EULmt94xYboJNIx5g obzw== 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=kkt/0bKq8pLga6nqTS9fpUgZaSOqUoxo+7mOfZMsTgztV91lT8BzRmflGuw6awX0Sf 0fYlTS1PFIHJywB+yhGLd+d+aDZ7Np/HsEsTWgSqRrkfh8XbtF/zum2eNe2j8cSqJUXH ZGtBoXsvLNDg/4SmAmLT5UOUnLyP3UTExhY6WO7g3vDEAWe3t2zdK6wsUZuTOuc2iVQo Pff6qr3DeD4ptQJc55g25cW8WCSW2IntCFoU+I7Ud5Mxr6VB9IUyyPrTpg/hB9hpXEjc wKK+rn0d1oN1qpooDXb302zQrNjWVJmFVyBy8efNC1DCN9e+9mM0+BybPwj5e50JJ2nA eBhA== 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 e11-v6si18507868pln.161.2018.07.10.15.45.33; Tue, 10 Jul 2018 15:45:48 -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 S1732746AbeGJWoq (ORCPT + 99 others); Tue, 10 Jul 2018 18:44:46 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:48562 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732392AbeGJWoq (ORCPT ); Tue, 10 Jul 2018 18:44:46 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 75233DBDA; Tue, 10 Jul 2018 22:43:31 +0000 (UTC) Received: from warthog.procyon.org.uk (ovpn-120-149.rdu2.redhat.com [10.10.120.149]) by smtp.corp.redhat.com (Postfix) with ESMTP id B84E77C41; Tue, 10 Jul 2018 22:43:30 +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 18/32] cpuset: Use fs_context [ver #9] From: David Howells To: viro@zeniv.linux.org.uk Cc: Tejun Heo , dhowells@redhat.com, linux-fsdevel@vger.kernel.org, torvalds@linux-foundation.org, linux-kernel@vger.kernel.org Date: Tue, 10 Jul 2018 23:43:30 +0100 Message-ID: <153126261028.14533.5920703815183055814.stgit@warthog.procyon.org.uk> In-Reply-To: <153126248868.14533.9751473662727327569.stgit@warthog.procyon.org.uk> References: <153126248868.14533.9751473662727327569.stgit@warthog.procyon.org.uk> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Tue, 10 Jul 2018 22:43:31 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Tue, 10 Jul 2018 22:43:31 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.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, }; /*