1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
From a36af1327d41aae19708fdf35b0cbc7e1b73a4b4 Mon Sep 17 00:00:00 2001
From: He Zhe <zhe.he@windriver.com>
Date: Wed, 30 Jul 2014 16:58:52 +0800
Subject: [PATCH 2/2] Fix [RFC] cgroups: Resource controller for open files.
The original patch is based on:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
fad01e866afdbe01a1f3ec06a39c3a8b9e197014
3.15-rc8
Modify variable and macro in fs/filescontrol.c and include/linux/cgroup_subsys.h
according to target version. Correct wrong handling which causes boot failure in
fs/file.c.
Signed-off-by: He Zhe <zhe.he@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
---
fs/file.c | 6 ++++--
fs/filescontrol.c | 12 +++++++-----
include/linux/cgroup_subsys.h | 2 +-
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/fs/file.c b/fs/file.c
index 4b84070bf8f4..e615dc918ac8 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -820,8 +820,10 @@ static int do_dup2(struct files_struct *files,
#ifdef CONFIG_CGROUP_FILES
if (!tofree)
- if (!files_cgroup_alloc_fd(files, 1))
- goto Ebusy;
+ if (files_cgroup_alloc_fd(files, 1)) {
+ spin_unlock(&files->file_lock);
+ return -EMFILE;
+ }
#endif
get_file(file);
diff --git a/fs/filescontrol.c b/fs/filescontrol.c
index c532d02eb023..0ba8ffaa85d3 100644
--- a/fs/filescontrol.c
+++ b/fs/filescontrol.c
@@ -23,8 +23,8 @@
#include <linux/fs.h>
#include <linux/fdtable.h>
-struct cgroup_subsys files_cgrp_subsys __read_mostly;
-EXPORT_SYMBOL(files_cgrp_subsys);
+struct cgroup_subsys files_subsys __read_mostly;
+EXPORT_SYMBOL(files_subsys);
struct files_cgroup {
struct cgroup_subsys_state css;
@@ -92,9 +92,10 @@ u64 files_cgroup_count_fds(struct files_struct *files)
static u64 files_in_taskset(struct cgroup_taskset *tset)
{
+ struct cgroup_subsys_state *css = NULL;
struct task_struct *task;
u64 files = 0;
- cgroup_taskset_for_each(task, tset) {
+ cgroup_taskset_for_each(task, css, tset) {
if (!thread_group_leader(task))
continue;
@@ -212,13 +213,14 @@ static struct cftype files[] = {
{ }
};
-struct cgroup_subsys files_cgrp_subsys = {
+struct cgroup_subsys files_subsys = {
.name = "files",
.css_alloc = files_cgroup_css_alloc,
.css_free = files_cgroup_css_free,
.can_attach = files_cgroup_can_attach,
.attach = files_cgroup_attach,
.base_cftypes = files,
+ .subsys_id = files_subsys_id,
};
void files_cgroup_assign(struct files_struct *files)
@@ -227,7 +229,7 @@ void files_cgroup_assign(struct files_struct *files)
struct cgroup_subsys_state *css;
task_lock(tsk);
- css = task_css(tsk, files_cgrp_id);
+ css = task_css(tsk, files_subsys_id);
css_get(css);
files->files_cgroup = container_of(css, struct files_cgroup, css);
task_unlock(tsk);
diff --git a/include/linux/cgroup_subsys.h b/include/linux/cgroup_subsys.h
index e6c9a40f29e3..defadc0cb593 100644
--- a/include/linux/cgroup_subsys.h
+++ b/include/linux/cgroup_subsys.h
@@ -51,7 +51,7 @@ SUBSYS(net_prio)
SUBSYS(hugetlb)
#endif
-#if IS_ENABLED(CONFIG_CGROUP_FILES)
+#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_FILES)
SUBSYS(files)
#endif
--
1.8.1.2
|