]> Git Repo - linux.git/commitdiff
bcachefs: bch2_opts_to_text()
authorKent Overstreet <[email protected]>
Sun, 8 Sep 2024 00:27:23 +0000 (20:27 -0400)
committerKent Overstreet <[email protected]>
Sat, 21 Sep 2024 15:39:48 +0000 (11:39 -0400)
Factor out bch2_show_options() into a generic helper, for debugging
option passing issues.

Signed-off-by: Kent Overstreet <[email protected]>
fs/bcachefs/fs.c
fs/bcachefs/opts.c
fs/bcachefs/opts.h

index dfadfb82399f59fa0b833200bc34291e8ed40081..1aee5bafaae54cb79a518ca205ada336feb05e8f 100644 (file)
@@ -1930,30 +1930,14 @@ static int bch2_show_devname(struct seq_file *seq, struct dentry *root)
 static int bch2_show_options(struct seq_file *seq, struct dentry *root)
 {
        struct bch_fs *c = root->d_sb->s_fs_info;
-       enum bch_opt_id i;
        struct printbuf buf = PRINTBUF;
-       int ret = 0;
-
-       for (i = 0; i < bch2_opts_nr; i++) {
-               const struct bch_option *opt = &bch2_opt_table[i];
-               u64 v = bch2_opt_get_by_id(&c->opts, i);
-
-               if ((opt->flags & OPT_HIDDEN) ||
-                   !(opt->flags & OPT_MOUNT))
-                       continue;
 
-               if (v == bch2_opt_get_by_id(&bch2_opts_default, i))
-                       continue;
-
-               printbuf_reset(&buf);
-               bch2_opt_to_text(&buf, c, c->disk_sb.sb, opt, v,
-                                OPT_SHOW_MOUNT_STYLE);
-               seq_putc(seq, ',');
-               seq_puts(seq, buf.buf);
-       }
+       bch2_opts_to_text(&buf, c->opts, c, c->disk_sb.sb,
+                         OPT_MOUNT, OPT_HIDDEN, OPT_SHOW_MOUNT_STYLE);
+       printbuf_nul_terminate(&buf);
+       seq_puts(seq, buf.buf);
 
-       if (buf.allocation_failure)
-               ret = -ENOMEM;
+       int ret = buf.allocation_failure ? -ENOMEM : 0;
        printbuf_exit(&buf);
        return ret;
 }
index 9cb9b05db6d17404da57d0dc9bbbe0a0fe67c1c2..232be8a44051ffcf6b75951827c465b9aedfab61 100644 (file)
@@ -443,6 +443,32 @@ void bch2_opt_to_text(struct printbuf *out,
        }
 }
 
+void bch2_opts_to_text(struct printbuf *out,
+                      struct bch_opts opts,
+                      struct bch_fs *c, struct bch_sb *sb,
+                      unsigned show_mask, unsigned hide_mask,
+                      unsigned flags)
+{
+       bool first = true;
+
+       for (enum bch_opt_id i = 0; i < bch2_opts_nr; i++) {
+               const struct bch_option *opt = &bch2_opt_table[i];
+
+               if ((opt->flags & hide_mask) || !(opt->flags & show_mask))
+                       continue;
+
+               u64 v = bch2_opt_get_by_id(&opts, i);
+               if (v == bch2_opt_get_by_id(&bch2_opts_default, i))
+                       continue;
+
+               if (!first)
+                       prt_char(out, ',');
+               first = false;
+
+               bch2_opt_to_text(out, c, sb, opt, v, flags);
+       }
+}
+
 int bch2_opt_check_may_set(struct bch_fs *c, int id, u64 v)
 {
        int ret = 0;
index f2ae13f0fbadeb7c5c5859621e569de794394f3c..cb2e244a24298393b0be3ee8fd4b4991d6bf93f4 100644 (file)
@@ -605,6 +605,10 @@ int bch2_opt_parse(struct bch_fs *, const struct bch_option *,
 
 void bch2_opt_to_text(struct printbuf *, struct bch_fs *, struct bch_sb *,
                      const struct bch_option *, u64, unsigned);
+void bch2_opts_to_text(struct printbuf *,
+                      struct bch_opts,
+                      struct bch_fs *, struct bch_sb *,
+                      unsigned, unsigned, unsigned);
 
 int bch2_opt_check_may_set(struct bch_fs *, int, u64);
 int bch2_opts_check_may_set(struct bch_fs *);
This page took 0.08087 seconds and 4 git commands to generate.