Skip to content

Commit 347c4a8

Browse files
committed
memcg: remove cgroup_event->cft
The only use of cgroup_event->cft is distinguishing "usage_in_bytes" and "memsw.usgae_in_bytes" for mem_cgroup_usage_[un]register_event(), which can be done by adding an explicit argument to the function and implementing two wrappers so that the two cases can be distinguished from the function alone. Remove cgroup_event->cft and the related code including [un]register_events() methods. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Michal Hocko <mhocko@suse.cz>
1 parent fba9480 commit 347c4a8

File tree

3 files changed

+38
-43
lines changed

3 files changed

+38
-43
lines changed

include/linux/vmpressure.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ extern struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg);
3636
extern struct cgroup_subsys_state *vmpressure_to_css(struct vmpressure *vmpr);
3737
extern struct vmpressure *css_to_vmpressure(struct cgroup_subsys_state *css);
3838
extern int vmpressure_register_event(struct cgroup_subsys_state *css,
39-
struct cftype *cft,
4039
struct eventfd_ctx *eventfd,
4140
const char *args);
4241
extern void vmpressure_unregister_event(struct cgroup_subsys_state *css,
43-
struct cftype *cft,
4442
struct eventfd_ctx *eventfd);
4543
#else
4644
static inline void vmpressure(gfp_t gfp, struct mem_cgroup *memcg,

mm/memcontrol.c

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,6 @@ struct cgroup_event {
236236
* css which the event belongs to.
237237
*/
238238
struct cgroup_subsys_state *css;
239-
/*
240-
* Control file which the event associated.
241-
*/
242-
struct cftype *cft;
243239
/*
244240
* eventfd to signal userspace about the event.
245241
*/
@@ -254,15 +250,13 @@ struct cgroup_event {
254250
* on eventfd to send notification to userspace.
255251
*/
256252
int (*register_event)(struct cgroup_subsys_state *css,
257-
struct cftype *cft, struct eventfd_ctx *eventfd,
258-
const char *args);
253+
struct eventfd_ctx *eventfd, const char *args);
259254
/*
260255
* unregister_event() callback will be called when userspace closes
261256
* the eventfd or on cgroup removing. This callback must be set,
262257
* if you want provide notification functionality.
263258
*/
264259
void (*unregister_event)(struct cgroup_subsys_state *css,
265-
struct cftype *cft,
266260
struct eventfd_ctx *eventfd);
267261
/*
268262
* All fields below needed to unregister event when
@@ -5688,13 +5682,12 @@ static void mem_cgroup_oom_notify(struct mem_cgroup *memcg)
56885682
mem_cgroup_oom_notify_cb(iter);
56895683
}
56905684

5691-
static int mem_cgroup_usage_register_event(struct cgroup_subsys_state *css,
5692-
struct cftype *cft, struct eventfd_ctx *eventfd, const char *args)
5685+
static int __mem_cgroup_usage_register_event(struct cgroup_subsys_state *css,
5686+
struct eventfd_ctx *eventfd, const char *args, enum res_type type)
56935687
{
56945688
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
56955689
struct mem_cgroup_thresholds *thresholds;
56965690
struct mem_cgroup_threshold_ary *new;
5697-
enum res_type type = MEMFILE_TYPE(cft->private);
56985691
u64 threshold, usage;
56995692
int i, size, ret;
57005693

@@ -5771,13 +5764,24 @@ static int mem_cgroup_usage_register_event(struct cgroup_subsys_state *css,
57715764
return ret;
57725765
}
57735766

5774-
static void mem_cgroup_usage_unregister_event(struct cgroup_subsys_state *css,
5775-
struct cftype *cft, struct eventfd_ctx *eventfd)
5767+
static int mem_cgroup_usage_register_event(struct cgroup_subsys_state *css,
5768+
struct eventfd_ctx *eventfd, const char *args)
5769+
{
5770+
return __mem_cgroup_usage_register_event(css, eventfd, args, _MEM);
5771+
}
5772+
5773+
static int memsw_cgroup_usage_register_event(struct cgroup_subsys_state *css,
5774+
struct eventfd_ctx *eventfd, const char *args)
5775+
{
5776+
return __mem_cgroup_usage_register_event(css, eventfd, args, _MEMSWAP);
5777+
}
5778+
5779+
static void __mem_cgroup_usage_unregister_event(struct cgroup_subsys_state *css,
5780+
struct eventfd_ctx *eventfd, enum res_type type)
57765781
{
57775782
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
57785783
struct mem_cgroup_thresholds *thresholds;
57795784
struct mem_cgroup_threshold_ary *new;
5780-
enum res_type type = MEMFILE_TYPE(cft->private);
57815785
u64 usage;
57825786
int i, j, size;
57835787

@@ -5850,14 +5854,24 @@ static void mem_cgroup_usage_unregister_event(struct cgroup_subsys_state *css,
58505854
mutex_unlock(&memcg->thresholds_lock);
58515855
}
58525856

5857+
static void mem_cgroup_usage_unregister_event(struct cgroup_subsys_state *css,
5858+
struct eventfd_ctx *eventfd)
5859+
{
5860+
return __mem_cgroup_usage_unregister_event(css, eventfd, _MEM);
5861+
}
5862+
5863+
static void memsw_cgroup_usage_unregister_event(struct cgroup_subsys_state *css,
5864+
struct eventfd_ctx *eventfd)
5865+
{
5866+
return __mem_cgroup_usage_unregister_event(css, eventfd, _MEMSWAP);
5867+
}
5868+
58535869
static int mem_cgroup_oom_register_event(struct cgroup_subsys_state *css,
5854-
struct cftype *cft, struct eventfd_ctx *eventfd, const char *args)
5870+
struct eventfd_ctx *eventfd, const char *args)
58555871
{
58565872
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
58575873
struct mem_cgroup_eventfd_list *event;
5858-
enum res_type type = MEMFILE_TYPE(cft->private);
58595874

5860-
BUG_ON(type != _OOM_TYPE);
58615875
event = kmalloc(sizeof(*event), GFP_KERNEL);
58625876
if (!event)
58635877
return -ENOMEM;
@@ -5876,13 +5890,10 @@ static int mem_cgroup_oom_register_event(struct cgroup_subsys_state *css,
58765890
}
58775891

58785892
static void mem_cgroup_oom_unregister_event(struct cgroup_subsys_state *css,
5879-
struct cftype *cft, struct eventfd_ctx *eventfd)
5893+
struct eventfd_ctx *eventfd)
58805894
{
58815895
struct mem_cgroup *memcg = mem_cgroup_from_css(css);
58825896
struct mem_cgroup_eventfd_list *ev, *tmp;
5883-
enum res_type type = MEMFILE_TYPE(cft->private);
5884-
5885-
BUG_ON(type != _OOM_TYPE);
58865897

58875898
spin_lock(&memcg_oom_lock);
58885899

@@ -6012,7 +6023,7 @@ static void cgroup_event_remove(struct work_struct *work)
60126023

60136024
remove_wait_queue(event->wqh, &event->wait);
60146025

6015-
event->unregister_event(css, event->cft, event->eventfd);
6026+
event->unregister_event(css, event->eventfd);
60166027

60176028
/* Notify userspace the event is going away. */
60186029
eventfd_signal(event->eventfd, 1);
@@ -6133,12 +6144,6 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css,
61336144
if (ret < 0)
61346145
goto out_put_cfile;
61356146

6136-
event->cft = __file_cft(cfile.file);
6137-
if (IS_ERR(event->cft)) {
6138-
ret = PTR_ERR(event->cft);
6139-
goto out_put_cfile;
6140-
}
6141-
61426147
/*
61436148
* Determine the event callbacks and set them in @event. This used
61446149
* to be done via struct cftype but cgroup core no longer knows
@@ -6157,8 +6162,8 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css,
61576162
event->register_event = vmpressure_register_event;
61586163
event->unregister_event = vmpressure_unregister_event;
61596164
} else if (!strcmp(name, "memory.memsw.usage_in_bytes")) {
6160-
event->register_event = mem_cgroup_usage_register_event;
6161-
event->unregister_event = mem_cgroup_usage_unregister_event;
6165+
event->register_event = memsw_cgroup_usage_register_event;
6166+
event->unregister_event = memsw_cgroup_usage_unregister_event;
61626167
} else {
61636168
ret = -EINVAL;
61646169
goto out_put_cfile;
@@ -6181,7 +6186,7 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css,
61816186
if (ret)
61826187
goto out_put_cfile;
61836188

6184-
ret = event->register_event(css, event->cft, event->eventfd, buffer);
6189+
ret = event->register_event(css, event->eventfd, buffer);
61856190
if (ret)
61866191
goto out_put_css;
61876192

mm/vmpressure.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,6 @@ void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio)
279279
/**
280280
* vmpressure_register_event() - Bind vmpressure notifications to an eventfd
281281
* @css: css that is interested in vmpressure notifications
282-
* @cft: cgroup control files handle
283282
* @eventfd: eventfd context to link notifications with
284283
* @args: event arguments (used to set up a pressure level threshold)
285284
*
@@ -289,13 +288,10 @@ void vmpressure_prio(gfp_t gfp, struct mem_cgroup *memcg, int prio)
289288
* threshold (one of vmpressure_str_levels, i.e. "low", "medium", or
290289
* "critical").
291290
*
292-
* This function should not be used directly, just pass it to (struct
293-
* cftype).register_event, and then cgroup core will handle everything by
294-
* itself.
291+
* To be used as memcg event method.
295292
*/
296293
int vmpressure_register_event(struct cgroup_subsys_state *css,
297-
struct cftype *cft, struct eventfd_ctx *eventfd,
298-
const char *args)
294+
struct eventfd_ctx *eventfd, const char *args)
299295
{
300296
struct vmpressure *vmpr = css_to_vmpressure(css);
301297
struct vmpressure_event *ev;
@@ -326,19 +322,15 @@ int vmpressure_register_event(struct cgroup_subsys_state *css,
326322
/**
327323
* vmpressure_unregister_event() - Unbind eventfd from vmpressure
328324
* @css: css handle
329-
* @cft: cgroup control files handle
330325
* @eventfd: eventfd context that was used to link vmpressure with the @cg
331326
*
332327
* This function does internal manipulations to detach the @eventfd from
333328
* the vmpressure notifications, and then frees internal resources
334329
* associated with the @eventfd (but the @eventfd itself is not freed).
335330
*
336-
* This function should not be used directly, just pass it to (struct
337-
* cftype).unregister_event, and then cgroup core will handle everything
338-
* by itself.
331+
* To be used as memcg event method.
339332
*/
340333
void vmpressure_unregister_event(struct cgroup_subsys_state *css,
341-
struct cftype *cft,
342334
struct eventfd_ctx *eventfd)
343335
{
344336
struct vmpressure *vmpr = css_to_vmpressure(css);

0 commit comments

Comments
 (0)