| // SPDX-License-Identifier: GPL-2.0-or-later | |
| /* FS-Cache statistics viewing interface | |
| * | |
| * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | |
| * Written by David Howells (dhowells@redhat.com) | |
| */ | |
| #define FSCACHE_DEBUG_LEVEL OPERATION | |
| #include <linux/module.h> | |
| #include <linux/proc_fs.h> | |
| #include <linux/seq_file.h> | |
| #include "internal.h" | |
| /* | |
| * initialise the /proc/fs/fscache/ directory | |
| */ | |
| int __init fscache_proc_init(void) | |
| { | |
| _enter(""); | |
| if (!proc_mkdir("fs/fscache", NULL)) | |
| goto error_dir; | |
| #ifdef CONFIG_FSCACHE_STATS | |
| if (!proc_create_single("fs/fscache/stats", S_IFREG | 0444, NULL, | |
| fscache_stats_show)) | |
| goto error_stats; | |
| #endif | |
| #ifdef CONFIG_FSCACHE_HISTOGRAM | |
| if (!proc_create_seq("fs/fscache/histogram", S_IFREG | 0444, NULL, | |
| &fscache_histogram_ops)) | |
| goto error_histogram; | |
| #endif | |
| #ifdef CONFIG_FSCACHE_OBJECT_LIST | |
| if (!proc_create("fs/fscache/objects", S_IFREG | 0444, NULL, | |
| &fscache_objlist_proc_ops)) | |
| goto error_objects; | |
| #endif | |
| _leave(" = 0"); | |
| return 0; | |
| #ifdef CONFIG_FSCACHE_OBJECT_LIST | |
| error_objects: | |
| #endif | |
| #ifdef CONFIG_FSCACHE_HISTOGRAM | |
| remove_proc_entry("fs/fscache/histogram", NULL); | |
| error_histogram: | |
| #endif | |
| #ifdef CONFIG_FSCACHE_STATS | |
| remove_proc_entry("fs/fscache/stats", NULL); | |
| error_stats: | |
| #endif | |
| remove_proc_entry("fs/fscache", NULL); | |
| error_dir: | |
| _leave(" = -ENOMEM"); | |
| return -ENOMEM; | |
| } | |
| /* | |
| * clean up the /proc/fs/fscache/ directory | |
| */ | |
| void fscache_proc_cleanup(void) | |
| { | |
| #ifdef CONFIG_FSCACHE_OBJECT_LIST | |
| remove_proc_entry("fs/fscache/objects", NULL); | |
| #endif | |
| #ifdef CONFIG_FSCACHE_HISTOGRAM | |
| remove_proc_entry("fs/fscache/histogram", NULL); | |
| #endif | |
| #ifdef CONFIG_FSCACHE_STATS | |
| remove_proc_entry("fs/fscache/stats", NULL); | |
| #endif | |
| remove_proc_entry("fs/fscache", NULL); | |
| } |