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