| // 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); |
| } |