Branch data Line data Source code
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 : 3 : int __init fscache_proc_init(void) 18 : : { 19 : : _enter(""); 20 : : 21 : 3 : if (!proc_mkdir("fs/fscache", NULL)) 22 : : goto error_dir; 23 : : 24 : : #ifdef CONFIG_FSCACHE_STATS 25 : 3 : 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 : 3 : 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_fops)) 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 : 0 : remove_proc_entry("fs/fscache/stats", NULL); 54 : : error_stats: 55 : : #endif 56 : 0 : 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 : 0 : 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 : 0 : remove_proc_entry("fs/fscache/histogram", NULL); 72 : : #endif 73 : : #ifdef CONFIG_FSCACHE_STATS 74 : 0 : remove_proc_entry("fs/fscache/stats", NULL); 75 : : #endif 76 : 0 : remove_proc_entry("fs/fscache", NULL); 77 : 0 : }