]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: add a quieter bch2_read_super
authorDaniel Hill <daniel@gluo.nz>
Sun, 19 Nov 2023 20:53:36 +0000 (09:53 +1300)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Jan 2024 16:47:38 +0000 (11:47 -0500)
If we're looking for a bcachefs supers iteratively we don't want to see
this error.

This function replaces KERN_ERR with KERN_INFO for when we don't find a
bcachefs superblock but preserves other errors.

Signed-off-by: Daniel Hill <daniel@gluo.nz>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/super-io.c
fs/bcachefs/super-io.h

index 4c98d8cc2a7976cd933c2656a2a1ad07979e8244..320a04a42e5b0c00828e12edfb37efd20c5b35e6 100644 (file)
@@ -692,12 +692,13 @@ reread:
        return 0;
 }
 
-int bch2_read_super(const char *path, struct bch_opts *opts,
-                   struct bch_sb_handle *sb)
+static int __bch2_read_super(const char *path, struct bch_opts *opts,
+                   struct bch_sb_handle *sb, bool ignore_notbchfs_msg)
 {
        u64 offset = opt_get(*opts, sb);
        struct bch_sb_layout layout;
        struct printbuf err = PRINTBUF;
+       struct printbuf err2 = PRINTBUF;
        __le64 *i;
        int ret;
 #ifndef __KERNEL__
@@ -760,8 +761,14 @@ retry:
        if (opt_defined(*opts, sb))
                goto err;
 
-       printk(KERN_ERR "bcachefs (%s): error reading default superblock: %s\n",
+       prt_printf(&err2, "bcachefs (%s): error reading default superblock: %s\n",
               path, err.buf);
+       if (ret == -BCH_ERR_invalid_sb_magic && ignore_notbchfs_msg)
+               printk(KERN_INFO "%s", err2.buf);
+       else
+               printk(KERN_ERR "%s", err2.buf);
+
+       printbuf_exit(&err2);
        printbuf_reset(&err);
 
        /*
@@ -837,6 +844,20 @@ err_no_print:
        goto out;
 }
 
+int bch2_read_super(const char *path, struct bch_opts *opts,
+                   struct bch_sb_handle *sb)
+{
+       return __bch2_read_super(path, opts, sb, false);
+}
+
+/* provide a silenced version for mount.bcachefs */
+
+int bch2_read_super_silent(const char *path, struct bch_opts *opts,
+                   struct bch_sb_handle *sb)
+{
+       return __bch2_read_super(path, opts, sb, true);
+}
+
 /* write superblock: */
 
 static void write_super_endio(struct bio *bio)
index e41e5de531a0a254d7e9d2ee20f050c5415d19d2..654c5d4d522ab5d166904101c387f08378ee0d04 100644 (file)
@@ -84,6 +84,7 @@ void bch2_free_super(struct bch_sb_handle *);
 int bch2_sb_realloc(struct bch_sb_handle *, unsigned);
 
 int bch2_read_super(const char *, struct bch_opts *, struct bch_sb_handle *);
+int bch2_read_super_silent(const char *, struct bch_opts *, struct bch_sb_handle *);
 int bch2_write_super(struct bch_fs *);
 void __bch2_check_set_feature(struct bch_fs *, unsigned);