diff --git a/mm/vmscan.c b/mm/vmscan.c
index 3a15ab1..23eda73 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -193,8 +193,6 @@ struct scan_control {
  */
 int vm_swappiness = 60;
 
-struct kernfs_node *lru_gen_admin_node;
-
 static void set_task_reclaim_state(struct task_struct *task,
 				   struct reclaim_state *rs)
 {
@@ -4198,7 +4196,6 @@ static void inc_max_seq(struct lruvec *lruvec, bool can_swap, bool full_scan)
 
 	spin_unlock_irq(&lruvec->lru_lock);
 
-	kernfs_notify(lru_gen_admin_node);
 	trace_android_vh_mglru_new_gen(NULL);
 }
 
@@ -5265,105 +5262,9 @@ static struct kobj_attribute lru_gen_enabled_attr = __ATTR(
 	enabled, 0644, show_enabled, store_enabled
 );
 
-int print_node_mglru(struct lruvec *lruvec, char *buf, int orig_pos)
-{
-	unsigned long seq;
-	struct lru_gen_struct *lrugen = &lruvec->lrugen;
-
-	DEFINE_MAX_SEQ(lruvec);
-	DEFINE_MIN_SEQ(lruvec);
-
-	int print_pos = orig_pos;
-
-	seq = min(min_seq[0], min_seq[1]);
-
-	for (; seq <= max_seq; seq++) {
-		int gen, type, zone;
-		unsigned int msecs;
-
-		gen = lru_gen_from_seq(seq);
-		msecs = jiffies_to_msecs(jiffies - READ_ONCE(lrugen->timestamps[gen]));
-
-		print_pos += snprintf(buf + print_pos, PAGE_SIZE - print_pos,
-			" %10lu %10u", seq, msecs);
-
-		for (type = 0; type < ANON_AND_FILE; type++) {
-			long size = 0;
-
-			if (seq < min_seq[type]) {
-				print_pos += snprintf(buf + print_pos,
-					PAGE_SIZE - print_pos, "         -0 ");
-				continue;
-			}
-
-			for (zone = 0; zone < MAX_NR_ZONES; zone++)
-				size += READ_ONCE(lrugen->nr_pages[gen][type][zone]);
-
-			print_pos += snprintf(buf + print_pos,
-				PAGE_SIZE - print_pos, " %10lu ", max(size, 0L));
-		}
-
-		print_pos += snprintf(buf + print_pos, PAGE_SIZE - print_pos, "\n");
-
-	}
-
-	return print_pos - orig_pos;
-}
-
-static ssize_t lru_gen_admin_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
-{
-	struct lruvec *lruvec;
-	struct mem_cgroup *memcg;
-
-	char *path = kvmalloc(PATH_MAX, GFP_KERNEL);
-	int buf_len = 0;
-
-	if (!path)
-		return -EINVAL;
-	path[0] = 0;
-	buf[0] = 0;
-	memcg = mem_cgroup_iter(NULL, NULL, NULL);
-	do {
-		int nid;
-
-		for_each_node_state(nid, N_MEMORY) {
-			lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(nid));
-			if (lruvec) {
-				if (nid == first_memory_node) {
-#ifdef CONFIG_MEMCG
-					if (memcg)
-						cgroup_path(memcg->css.cgroup, path, PATH_MAX);
-					else
-						path[0] = 0;
-#endif
-					buf_len += snprintf(buf + buf_len, PAGE_SIZE - buf_len,
-						"memcg %5hu %s\n", mem_cgroup_id(memcg), path);
-				}
-
-				buf_len += snprintf(buf + buf_len, PAGE_SIZE - buf_len,
-					" node %5d\n", nid);
-				buf_len += print_node_mglru(lruvec, buf, buf_len);
-			}
-		}
-	} while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)));
-
-	if (buf_len >= PAGE_SIZE)
-		buf_len = PAGE_SIZE - 1;
-	buf[buf_len] = 0;
-
-	kvfree(path);
-
-	return buf_len;
-}
-
-static struct kobj_attribute lru_gen_admin_attr = __ATTR(
-	admin, 0444, lru_gen_admin_show, NULL
-);
-
 static struct attribute *lru_gen_attrs[] = {
 	&lru_gen_min_ttl_attr.attr,
 	&lru_gen_enabled_attr.attr,
-	&lru_gen_admin_attr.attr,
 	NULL
 };
 
@@ -5780,14 +5681,11 @@ void lru_gen_exit_memcg(struct mem_cgroup *memcg)
 
 static int __init init_lru_gen(void)
 {
-	struct kernfs_node *tmp;
 	BUILD_BUG_ON(MIN_NR_GENS + 1 >= MAX_NR_GENS);
 	BUILD_BUG_ON(BIT(LRU_GEN_WIDTH) <= MAX_NR_GENS);
 
 	if (sysfs_create_group(mm_kobj, &lru_gen_attr_group))
 		pr_err("lru_gen: failed to create sysfs group\n");
-	tmp = kernfs_find_and_get(mm_kobj->sd, "lru_gen");
-	lru_gen_admin_node = kernfs_find_and_get(tmp, "admin");
 
 	debugfs_create_file("lru_gen", 0644, NULL, NULL, &lru_gen_rw_fops);
 	debugfs_create_file("lru_gen_full", 0444, NULL, NULL, &lru_gen_ro_fops);
