18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* FS-Cache statistics viewing interface 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 58c2ecf20Sopenharmony_ci * Written by David Howells (dhowells@redhat.com) 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#define FSCACHE_DEBUG_LEVEL OPERATION 98c2ecf20Sopenharmony_ci#include <linux/module.h> 108c2ecf20Sopenharmony_ci#include <linux/proc_fs.h> 118c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 128c2ecf20Sopenharmony_ci#include "internal.h" 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci/* 158c2ecf20Sopenharmony_ci * initialise the /proc/fs/fscache/ directory 168c2ecf20Sopenharmony_ci */ 178c2ecf20Sopenharmony_ciint __init fscache_proc_init(void) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci _enter(""); 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci if (!proc_mkdir("fs/fscache", NULL)) 228c2ecf20Sopenharmony_ci goto error_dir; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_STATS 258c2ecf20Sopenharmony_ci if (!proc_create_single("fs/fscache/stats", S_IFREG | 0444, NULL, 268c2ecf20Sopenharmony_ci fscache_stats_show)) 278c2ecf20Sopenharmony_ci goto error_stats; 288c2ecf20Sopenharmony_ci#endif 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_HISTOGRAM 318c2ecf20Sopenharmony_ci if (!proc_create_seq("fs/fscache/histogram", S_IFREG | 0444, NULL, 328c2ecf20Sopenharmony_ci &fscache_histogram_ops)) 338c2ecf20Sopenharmony_ci goto error_histogram; 348c2ecf20Sopenharmony_ci#endif 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_OBJECT_LIST 378c2ecf20Sopenharmony_ci if (!proc_create("fs/fscache/objects", S_IFREG | 0444, NULL, 388c2ecf20Sopenharmony_ci &fscache_objlist_proc_ops)) 398c2ecf20Sopenharmony_ci goto error_objects; 408c2ecf20Sopenharmony_ci#endif 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci _leave(" = 0"); 438c2ecf20Sopenharmony_ci return 0; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_OBJECT_LIST 468c2ecf20Sopenharmony_cierror_objects: 478c2ecf20Sopenharmony_ci#endif 488c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_HISTOGRAM 498c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache/histogram", NULL); 508c2ecf20Sopenharmony_cierror_histogram: 518c2ecf20Sopenharmony_ci#endif 528c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_STATS 538c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache/stats", NULL); 548c2ecf20Sopenharmony_cierror_stats: 558c2ecf20Sopenharmony_ci#endif 568c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache", NULL); 578c2ecf20Sopenharmony_cierror_dir: 588c2ecf20Sopenharmony_ci _leave(" = -ENOMEM"); 598c2ecf20Sopenharmony_ci return -ENOMEM; 608c2ecf20Sopenharmony_ci} 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci/* 638c2ecf20Sopenharmony_ci * clean up the /proc/fs/fscache/ directory 648c2ecf20Sopenharmony_ci */ 658c2ecf20Sopenharmony_civoid fscache_proc_cleanup(void) 668c2ecf20Sopenharmony_ci{ 678c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_OBJECT_LIST 688c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache/objects", NULL); 698c2ecf20Sopenharmony_ci#endif 708c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_HISTOGRAM 718c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache/histogram", NULL); 728c2ecf20Sopenharmony_ci#endif 738c2ecf20Sopenharmony_ci#ifdef CONFIG_FSCACHE_STATS 748c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache/stats", NULL); 758c2ecf20Sopenharmony_ci#endif 768c2ecf20Sopenharmony_ci remove_proc_entry("fs/fscache", NULL); 778c2ecf20Sopenharmony_ci} 78