Re: [PATCH v5 06/40] netfs, fscache: Move /proc/fs/fscache to /proc/fs/netfs and put in a symlink

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Dec 21, 2023 at 9:24 AM David Howells <dhowells@xxxxxxxxxx> wrote:
>
> Rename /proc/fs/fscache to "netfs" and make a symlink from fscache to that.
>
> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
> Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>
> cc: Christian Brauner <christian@xxxxxxxxxx>
> cc: linux-fsdevel@xxxxxxxxxxxxxxx
> cc: linux-cachefs@xxxxxxxxxx
> ---
>
> Notes:
>     Changes
>     =======
>     ver #5)
>      - fscache_init/exit() should depend on CONFIG_FSCACHE, not CONFIG_PROC_FS.
>
>  fs/netfs/fscache_main.c  |  8 ++------
>  fs/netfs/fscache_proc.c  | 23 ++++++++---------------
>  fs/netfs/fscache_stats.c |  4 +---
>  fs/netfs/internal.h      | 12 +++++++++++-
>  fs/netfs/main.c          | 33 +++++++++++++++++++++++++++++++++
>  fs/netfs/stats.c         | 13 +++++++------
>  include/linux/netfs.h    |  1 -
>  7 files changed, 62 insertions(+), 32 deletions(-)
>
> diff --git a/fs/netfs/fscache_main.c b/fs/netfs/fscache_main.c
> index 00600a4d9ce5..42e98bb523e3 100644
> --- a/fs/netfs/fscache_main.c
> +++ b/fs/netfs/fscache_main.c
> @@ -62,7 +62,7 @@ unsigned int fscache_hash(unsigned int salt, const void *data, size_t len)
>  /*
>   * initialise the fs caching module
>   */
> -static int __init fscache_init(void)
> +int __init fscache_init(void)
>  {
>         int ret = -ENOMEM;
>
> @@ -94,12 +94,10 @@ static int __init fscache_init(void)
>         return ret;
>  }
>
> -fs_initcall(fscache_init);
> -
>  /*
>   * clean up on module removal
>   */
> -static void __exit fscache_exit(void)
> +void __exit fscache_exit(void)
>  {
>         _enter("");
>
> @@ -108,5 +106,3 @@ static void __exit fscache_exit(void)
>         destroy_workqueue(fscache_wq);
>         pr_notice("FS-Cache unloaded\n");
>  }
> -
> -module_exit(fscache_exit);
> diff --git a/fs/netfs/fscache_proc.c b/fs/netfs/fscache_proc.c
> index dc3b0e9c8cce..ecd0d1edafaa 100644
> --- a/fs/netfs/fscache_proc.c
> +++ b/fs/netfs/fscache_proc.c
> @@ -12,41 +12,34 @@
>  #include "internal.h"
>
>  /*
> - * initialise the /proc/fs/fscache/ directory
> + * Add files to /proc/fs/netfs/.
>   */
>  int __init fscache_proc_init(void)
>  {
> -       if (!proc_mkdir("fs/fscache", NULL))
> -               goto error_dir;
> +       if (!proc_symlink("fs/fscache", NULL, "../netfs"))

This should be just "netfs"

> +               goto error_sym;
>
> -       if (!proc_create_seq("fs/fscache/caches", S_IFREG | 0444, NULL,
> +       if (!proc_create_seq("fs/netfs/caches", S_IFREG | 0444, NULL,
>                              &fscache_caches_seq_ops))
>                 goto error;
>
> -       if (!proc_create_seq("fs/fscache/volumes", S_IFREG | 0444, NULL,
> +       if (!proc_create_seq("fs/netfs/volumes", S_IFREG | 0444, NULL,
>                              &fscache_volumes_seq_ops))
>                 goto error;
>
> -       if (!proc_create_seq("fs/fscache/cookies", S_IFREG | 0444, NULL,
> +       if (!proc_create_seq("fs/netfs/cookies", S_IFREG | 0444, NULL,
>                              &fscache_cookies_seq_ops))
>                 goto error;
> -
> -#ifdef CONFIG_FSCACHE_STATS
> -       if (!proc_create_single("fs/fscache/stats", S_IFREG | 0444, NULL,
> -                               fscache_stats_show))
> -               goto error;
> -#endif
> -
>         return 0;
>
>  error:
>         remove_proc_entry("fs/fscache", NULL);
> -error_dir:
> +error_sym:
>         return -ENOMEM;
>  }
>
>  /*
> - * clean up the /proc/fs/fscache/ directory
> + * Clean up the /proc/fs/fscache symlink.
>   */
>  void fscache_proc_cleanup(void)
>  {
> diff --git a/fs/netfs/fscache_stats.c b/fs/netfs/fscache_stats.c
> index fc94e5e79f1c..aad812ead398 100644
> --- a/fs/netfs/fscache_stats.c
> +++ b/fs/netfs/fscache_stats.c
> @@ -52,7 +52,7 @@ EXPORT_SYMBOL(fscache_n_culled);
>  /*
>   * display the general statistics
>   */
> -int fscache_stats_show(struct seq_file *m, void *v)
> +int fscache_stats_show(struct seq_file *m)
>  {
>         seq_puts(m, "FS-Cache statistics\n");
>         seq_printf(m, "Cookies: n=%d v=%d vcol=%u voom=%u\n",
> @@ -96,7 +96,5 @@ int fscache_stats_show(struct seq_file *m, void *v)
>         seq_printf(m, "IO     : rd=%u wr=%u\n",
>                    atomic_read(&fscache_n_read),
>                    atomic_read(&fscache_n_write));
> -
> -       netfs_stats_show(m);
>         return 0;
>  }
> diff --git a/fs/netfs/internal.h b/fs/netfs/internal.h
> index 43769ac606e8..3f6e22229433 100644
> --- a/fs/netfs/internal.h
> +++ b/fs/netfs/internal.h
> @@ -76,6 +76,7 @@ extern atomic_t netfs_n_rh_write_done;
>  extern atomic_t netfs_n_rh_write_failed;
>  extern atomic_t netfs_n_rh_write_zskip;
>
> +int netfs_stats_show(struct seq_file *m, void *v);
>
>  static inline void netfs_stat(atomic_t *stat)
>  {
> @@ -166,6 +167,13 @@ static inline void fscache_see_cookie(struct fscache_cookie *cookie,
>   * fscache-main.c
>   */
>  extern unsigned int fscache_hash(unsigned int salt, const void *data, size_t len);
> +#ifdef CONFIG_FSCACHE
> +int __init fscache_init(void);
> +void __exit fscache_exit(void);
> +#else
> +static inline int fscache_init(void) { return 0; }
> +static inline void fscache_exit(void) {}
> +#endif
>
>  /*
>   * fscache-proc.c
> @@ -216,12 +224,14 @@ static inline void fscache_stat_d(atomic_t *stat)
>
>  #define __fscache_stat(stat) (stat)
>
> -int fscache_stats_show(struct seq_file *m, void *v);
> +int fscache_stats_show(struct seq_file *m);
>  #else
>
>  #define __fscache_stat(stat) (NULL)
>  #define fscache_stat(stat) do {} while (0)
>  #define fscache_stat_d(stat) do {} while (0)
> +
> +static inline int fscache_stats_show(struct seq_file *m) { return 0; }
>  #endif
>
>  /*
> diff --git a/fs/netfs/main.c b/fs/netfs/main.c
> index 1ba8091fcf3e..c9af6e0896d3 100644
> --- a/fs/netfs/main.c
> +++ b/fs/netfs/main.c
> @@ -7,6 +7,8 @@
>
>  #include <linux/module.h>
>  #include <linux/export.h>
> +#include <linux/proc_fs.h>
> +#include <linux/seq_file.h>
>  #include "internal.h"
>  #define CREATE_TRACE_POINTS
>  #include <trace/events/netfs.h>
> @@ -19,3 +21,34 @@ unsigned netfs_debug;
>  module_param_named(debug, netfs_debug, uint, S_IWUSR | S_IRUGO);
>  MODULE_PARM_DESC(netfs_debug, "Netfs support debugging mask");
>
> +static int __init netfs_init(void)
> +{
> +       int ret = -ENOMEM;
> +
> +       if (!proc_mkdir("fs/netfs", NULL))
> +               goto error;
> +
> +#ifdef CONFIG_FSCACHE_STATS
> +       if (!proc_create_single("fs/netfs/stats", S_IFREG | 0444, NULL,
> +                               netfs_stats_show))
> +               goto error_proc;
> +#endif
> +
> +       ret = fscache_init();
> +       if (ret < 0)
> +               goto error_proc;
> +       return 0;
> +
> +error_proc:
> +       remove_proc_entry("fs/netfs", NULL);
> +error:
> +       return ret;
> +}
> +fs_initcall(netfs_init);
> +
> +static void __exit netfs_exit(void)
> +{
> +       fscache_exit();
> +       remove_proc_entry("fs/netfs", NULL);
> +}
> +module_exit(netfs_exit);
> diff --git a/fs/netfs/stats.c b/fs/netfs/stats.c
> index 5510a7a14a40..6025dc485f7e 100644
> --- a/fs/netfs/stats.c
> +++ b/fs/netfs/stats.c
> @@ -28,31 +28,32 @@ atomic_t netfs_n_rh_write_done;
>  atomic_t netfs_n_rh_write_failed;
>  atomic_t netfs_n_rh_write_zskip;
>
> -void netfs_stats_show(struct seq_file *m)
> +int netfs_stats_show(struct seq_file *m, void *v)
>  {
> -       seq_printf(m, "RdHelp : RA=%u RP=%u WB=%u WBZ=%u rr=%u sr=%u\n",
> +       seq_printf(m, "Netfs  : RA=%u RP=%u WB=%u WBZ=%u rr=%u sr=%u\n",
>                    atomic_read(&netfs_n_rh_readahead),
>                    atomic_read(&netfs_n_rh_readpage),
>                    atomic_read(&netfs_n_rh_write_begin),
>                    atomic_read(&netfs_n_rh_write_zskip),
>                    atomic_read(&netfs_n_rh_rreq),
>                    atomic_read(&netfs_n_rh_sreq));
> -       seq_printf(m, "RdHelp : ZR=%u sh=%u sk=%u\n",
> +       seq_printf(m, "Netfs  : ZR=%u sh=%u sk=%u\n",
>                    atomic_read(&netfs_n_rh_zero),
>                    atomic_read(&netfs_n_rh_short_read),
>                    atomic_read(&netfs_n_rh_write_zskip));
> -       seq_printf(m, "RdHelp : DL=%u ds=%u df=%u di=%u\n",
> +       seq_printf(m, "Netfs  : DL=%u ds=%u df=%u di=%u\n",
>                    atomic_read(&netfs_n_rh_download),
>                    atomic_read(&netfs_n_rh_download_done),
>                    atomic_read(&netfs_n_rh_download_failed),
>                    atomic_read(&netfs_n_rh_download_instead));
> -       seq_printf(m, "RdHelp : RD=%u rs=%u rf=%u\n",
> +       seq_printf(m, "Netfs  : RD=%u rs=%u rf=%u\n",
>                    atomic_read(&netfs_n_rh_read),
>                    atomic_read(&netfs_n_rh_read_done),
>                    atomic_read(&netfs_n_rh_read_failed));
> -       seq_printf(m, "RdHelp : WR=%u ws=%u wf=%u\n",
> +       seq_printf(m, "Netfs  : WR=%u ws=%u wf=%u\n",
>                    atomic_read(&netfs_n_rh_write),
>                    atomic_read(&netfs_n_rh_write_done),
>                    atomic_read(&netfs_n_rh_write_failed));
> +       return fscache_stats_show(m);
>  }
>  EXPORT_SYMBOL(netfs_stats_show);
> diff --git a/include/linux/netfs.h b/include/linux/netfs.h
> index d294ff8f9ae4..9bd91cd615d5 100644
> --- a/include/linux/netfs.h
> +++ b/include/linux/netfs.h
> @@ -294,7 +294,6 @@ void netfs_get_subrequest(struct netfs_io_subrequest *subreq,
>                           enum netfs_sreq_ref_trace what);
>  void netfs_put_subrequest(struct netfs_io_subrequest *subreq,
>                           bool was_async, enum netfs_sreq_ref_trace what);
> -void netfs_stats_show(struct seq_file *);
>  ssize_t netfs_extract_user_iter(struct iov_iter *orig, size_t orig_len,
>                                 struct iov_iter *new,
>                                 iov_iter_extraction_t extraction_flags);
>

Marc





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux