@@ -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+
58535869static 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
58785892static 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
0 commit comments