@@ -309,8 +309,18 @@ static const struct kobj_type damon_sysfs_stats_ktype = {
309309 * filter directory
310310 */
311311
312+ /*
313+ * enum damos_sysfs_filter_handle_layer - Layers handling filters of a dir.
314+ */
315+ enum damos_sysfs_filter_handle_layer {
316+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_CORE ,
317+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_OPS ,
318+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_BOTH ,
319+ };
320+
312321struct damon_sysfs_scheme_filter {
313322 struct kobject kobj ;
323+ enum damos_sysfs_filter_handle_layer handle_layer ;
314324 enum damos_filter_type type ;
315325 bool matching ;
316326 bool allow ;
@@ -320,9 +330,15 @@ struct damon_sysfs_scheme_filter {
320330 int target_idx ;
321331};
322332
323- static struct damon_sysfs_scheme_filter * damon_sysfs_scheme_filter_alloc (void )
333+ static struct damon_sysfs_scheme_filter * damon_sysfs_scheme_filter_alloc (
334+ enum damos_sysfs_filter_handle_layer layer )
324335{
325- return kzalloc (sizeof (struct damon_sysfs_scheme_filter ), GFP_KERNEL );
336+ struct damon_sysfs_scheme_filter * filter ;
337+
338+ filter = kzalloc (sizeof (struct damon_sysfs_scheme_filter ), GFP_KERNEL );
339+ if (filter )
340+ filter -> handle_layer = layer ;
341+ return filter ;
326342}
327343
328344/* Should match with enum damos_filter_type */
@@ -595,14 +611,20 @@ static const struct kobj_type damon_sysfs_scheme_filter_ktype = {
595611
596612struct damon_sysfs_scheme_filters {
597613 struct kobject kobj ;
614+ enum damos_sysfs_filter_handle_layer handle_layer ;
598615 struct damon_sysfs_scheme_filter * * filters_arr ;
599616 int nr ;
600617};
601618
602619static struct damon_sysfs_scheme_filters *
603- damon_sysfs_scheme_filters_alloc (void )
620+ damon_sysfs_scheme_filters_alloc (enum damos_sysfs_filter_handle_layer layer )
604621{
605- return kzalloc (sizeof (struct damon_sysfs_scheme_filters ), GFP_KERNEL );
622+ struct damon_sysfs_scheme_filters * filters ;
623+
624+ filters = kzalloc (sizeof (struct damon_sysfs_scheme_filters ), GFP_KERNEL );
625+ if (filters )
626+ filters -> handle_layer = layer ;
627+ return filters ;
606628}
607629
608630static void damon_sysfs_scheme_filters_rm_dirs (
@@ -635,7 +657,8 @@ static int damon_sysfs_scheme_filters_add_dirs(
635657 filters -> filters_arr = filters_arr ;
636658
637659 for (i = 0 ; i < nr_filters ; i ++ ) {
638- filter = damon_sysfs_scheme_filter_alloc ();
660+ filter = damon_sysfs_scheme_filter_alloc (
661+ filters -> handle_layer );
639662 if (!filter ) {
640663 damon_sysfs_scheme_filters_rm_dirs (filters );
641664 return - ENOMEM ;
@@ -1607,11 +1630,11 @@ static int damon_sysfs_scheme_set_watermarks(struct damon_sysfs_scheme *scheme)
16071630}
16081631
16091632static int damon_sysfs_scheme_set_filters (struct damon_sysfs_scheme * scheme ,
1610- const char * name ,
1633+ enum damos_sysfs_filter_handle_layer layer , const char * name ,
16111634 struct damon_sysfs_scheme_filters * * filters_ptr )
16121635{
16131636 struct damon_sysfs_scheme_filters * filters =
1614- damon_sysfs_scheme_filters_alloc ();
1637+ damon_sysfs_scheme_filters_alloc (layer );
16151638 int err ;
16161639
16171640 if (!filters )
@@ -1630,15 +1653,18 @@ static int damos_sysfs_set_filter_dirs(struct damon_sysfs_scheme *scheme)
16301653{
16311654 int err ;
16321655
1633- err = damon_sysfs_scheme_set_filters (scheme , "filters" ,
1656+ err = damon_sysfs_scheme_set_filters (scheme ,
1657+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_BOTH , "filters" ,
16341658 & scheme -> filters );
16351659 if (err )
16361660 return err ;
1637- err = damon_sysfs_scheme_set_filters (scheme , "core_filters" ,
1661+ err = damon_sysfs_scheme_set_filters (scheme ,
1662+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_CORE , "core_filters" ,
16381663 & scheme -> core_filters );
16391664 if (err )
16401665 goto put_filters_out ;
1641- err = damon_sysfs_scheme_set_filters (scheme , "ops_filters" ,
1666+ err = damon_sysfs_scheme_set_filters (scheme ,
1667+ DAMOS_SYSFS_FILTER_HANDLE_LAYER_OPS , "ops_filters" ,
16421668 & scheme -> ops_filters );
16431669 if (err )
16441670 goto put_core_filters_out ;
0 commit comments