1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* FS-Cache statistics viewing interface 3 * 4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8 #define FSCACHE_DEBUG_LEVEL OPERATION 9 #include <linux/module.h> 10 #include <linux/proc_fs.h> 11 #include <linux/seq_file.h> 12 #include "internal.h" 13 14 /* 15 * initialise the /proc/fs/fscache/ directory 16 */ 17 int __init fscache_proc_init(void) 18 { 19 _enter(""); 20 21 if (!proc_mkdir("fs/fscache", NULL)) 22 goto error_dir; 23 24 #ifdef CONFIG_FSCACHE_STATS 25 if (!proc_create_single("fs/fscache/stats", S_IFREG | 0444, NULL, 26 fscache_stats_show)) 27 goto error_stats; 28 #endif 29 30 #ifdef CONFIG_FSCACHE_HISTOGRAM 31 if (!proc_create_seq("fs/fscache/histogram", S_IFREG | 0444, NULL, 32 &fscache_histogram_ops)) 33 goto error_histogram; 34 #endif 35 36 #ifdef CONFIG_FSCACHE_OBJECT_LIST 37 if (!proc_create("fs/fscache/objects", S_IFREG | 0444, NULL, 38 &fscache_objlist_proc_ops)) 39 goto error_objects; 40 #endif 41 42 _leave(" = 0"); 43 return 0; 44 45 #ifdef CONFIG_FSCACHE_OBJECT_LIST 46 error_objects: 47 #endif 48 #ifdef CONFIG_FSCACHE_HISTOGRAM 49 remove_proc_entry("fs/fscache/histogram", NULL); 50 error_histogram: 51 #endif 52 #ifdef CONFIG_FSCACHE_STATS 53 remove_proc_entry("fs/fscache/stats", NULL); 54 error_stats: 55 #endif 56 remove_proc_entry("fs/fscache", NULL); 57 error_dir: 58 _leave(" = -ENOMEM"); 59 return -ENOMEM; 60 } 61 62 /* 63 * clean up the /proc/fs/fscache/ directory 64 */ 65 void fscache_proc_cleanup(void) 66 { 67 #ifdef CONFIG_FSCACHE_OBJECT_LIST 68 remove_proc_entry("fs/fscache/objects", NULL); 69 #endif 70 #ifdef CONFIG_FSCACHE_HISTOGRAM 71 remove_proc_entry("fs/fscache/histogram", NULL); 72 #endif 73 #ifdef CONFIG_FSCACHE_STATS 74 remove_proc_entry("fs/fscache/stats", NULL); 75 #endif 76 remove_proc_entry("fs/fscache", NULL); 77 } 78