Merge tag 'bcachefs-2024-03-13' of https://evilpiepirate.org/git/bcachefs
[linux-2.6-microblaze.git] / fs / bcachefs / super-io.c
index bd64eb6..bceac29 100644 (file)
@@ -470,6 +470,14 @@ static int bch2_sb_validate(struct bch_sb_handle *disk_sb, struct printbuf *out,
                        return ret;
        }
 
+       if (rw == WRITE &&
+           bch2_sb_member_get(sb, sb->dev_idx).seq != sb->seq) {
+               prt_printf(out, "Invalid superblock: member seq %llu != sb seq %llu",
+                          le64_to_cpu(bch2_sb_member_get(sb, sb->dev_idx).seq),
+                          le64_to_cpu(sb->seq));
+               return -BCH_ERR_invalid_sb_members_missing;
+       }
+
        return 0;
 }
 
@@ -717,6 +725,7 @@ retry:
 
        if (IS_ERR(sb->s_bdev_file)) {
                ret = PTR_ERR(sb->s_bdev_file);
+               prt_printf(&err, "error opening %s: %s", path, bch2_err_str(ret));
                goto err;
        }
        sb->bdev = file_bdev(sb->s_bdev_file);
@@ -743,9 +752,9 @@ retry:
        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);
+               bch2_print_opts(opts, KERN_INFO "%s", err2.buf);
        else
-               printk(KERN_ERR "%s", err2.buf);
+               bch2_print_opts(opts, KERN_ERR "%s", err2.buf);
 
        printbuf_exit(&err2);
        printbuf_reset(&err);
@@ -803,21 +812,20 @@ got_super:
                goto err;
        }
 
-       ret = 0;
        sb->have_layout = true;
 
        ret = bch2_sb_validate(sb, &err, READ);
        if (ret) {
-               printk(KERN_ERR "bcachefs (%s): error validating superblock: %s\n",
-                      path, err.buf);
+               bch2_print_opts(opts, KERN_ERR "bcachefs (%s): error validating superblock: %s\n",
+                               path, err.buf);
                goto err_no_print;
        }
 out:
        printbuf_exit(&err);
        return ret;
 err:
-       printk(KERN_ERR "bcachefs (%s): error reading superblock: %s\n",
-              path, err.buf);
+       bch2_print_opts(opts, KERN_ERR "bcachefs (%s): error reading superblock: %s\n",
+                       path, err.buf);
 err_no_print:
        bch2_free_super(sb);
        goto out;