]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/super-io.c
Update bcachefs sources to c887148ebf99 thread_with_file: add f_ops.flush
[bcachefs-tools-debian] / libbcachefs / super-io.c
index 55926b81eede63596f7a48f6daaa363bede4d504..a3a9e85ab03c0b3eb288255eda63bceede7af487 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "bcachefs.h"
 #include "checksum.h"
-#include "counters.h"
 #include "disk_groups.h"
 #include "ec.h"
 #include "error.h"
@@ -13,6 +12,7 @@
 #include "replicas.h"
 #include "quota.h"
 #include "sb-clean.h"
+#include "sb-counters.h"
 #include "sb-downgrade.h"
 #include "sb-errors.h"
 #include "sb-members.h"
@@ -142,8 +142,8 @@ void bch2_sb_field_delete(struct bch_sb_handle *sb,
 void bch2_free_super(struct bch_sb_handle *sb)
 {
        kfree(sb->bio);
-       if (!IS_ERR_OR_NULL(sb->bdev))
-               blkdev_put(sb->bdev, sb->holder);
+       if (!IS_ERR_OR_NULL(sb->bdev_handle))
+               bdev_release(sb->bdev_handle);
        kfree(sb->holder);
        kfree(sb->sb_name);
 
@@ -704,21 +704,23 @@ retry:
        if (!opt_get(*opts, nochanges))
                sb->mode |= BLK_OPEN_WRITE;
 
-       sb->bdev = blkdev_get_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
-       if (IS_ERR(sb->bdev) &&
-           PTR_ERR(sb->bdev) == -EACCES &&
+       sb->bdev_handle = bdev_open_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
+       if (IS_ERR(sb->bdev_handle) &&
+           PTR_ERR(sb->bdev_handle) == -EACCES &&
            opt_get(*opts, read_only)) {
                sb->mode &= ~BLK_OPEN_WRITE;
 
-               sb->bdev = blkdev_get_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
-               if (!IS_ERR(sb->bdev))
+               sb->bdev_handle = bdev_open_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
+               if (!IS_ERR(sb->bdev_handle))
                        opt_set(*opts, nochanges, true);
        }
 
-       if (IS_ERR(sb->bdev)) {
-               ret = PTR_ERR(sb->bdev);
-               goto out;
+       if (IS_ERR(sb->bdev_handle)) {
+               ret = PTR_ERR(sb->bdev_handle);
+               prt_printf(&err, "error opening %s: %s", path, bch2_err_str(ret));
+               goto err;
        }
+       sb->bdev = sb->bdev_handle->bdev;
 
        ret = bch2_sb_realloc(sb, 0);
        if (ret) {
@@ -742,9 +744,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);
@@ -807,16 +809,16 @@ got_super:
 
        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;
@@ -1320,7 +1322,9 @@ void bch2_sb_to_text(struct printbuf *out, struct bch_sb *sb,
 
        prt_printf(out, "Superblock size:");
        prt_tab(out);
-       prt_printf(out, "%zu", vstruct_bytes(sb));
+       prt_units_u64(out, vstruct_bytes(sb));
+       prt_str(out, "/");
+       prt_units_u64(out, 512ULL << sb->layout.sb_max_size_bits);
        prt_newline(out);
 
        prt_printf(out, "Clean:");