On single device filesystems, c->name contains the block device name,
not the UUID.

Initialize this earlier, so that single device mode can use it for
initializing sysfs/debugfs.

Signed-off-by: Kent Overstreet <[email protected]>
---
 fs/bcachefs/super.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
index a58edde43bee..07c8149c6712 100644
--- a/fs/bcachefs/super.c
+++ b/fs/bcachefs/super.c
@@ -79,6 +79,8 @@ MODULE_SOFTDEP("pre: chacha20");
 MODULE_SOFTDEP("pre: poly1305");
 MODULE_SOFTDEP("pre: xxhash");
 
+typedef DARRAY(struct bch_sb_handle) bch_sb_handles;
+
 const char * const bch2_fs_flag_strs[] = {
 #define x(n)           #n,
        BCH_FS_FLAGS()
@@ -750,7 +752,8 @@ static int bch2_fs_online(struct bch_fs *c)
        return ret;
 }
 
-static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts)
+static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts,
+                                   bch_sb_handles *sbs)
 {
        struct bch_fs *c;
        struct printbuf name = PRINTBUF;
@@ -864,14 +867,6 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, 
struct bch_opts opts)
        }
 #endif
 
-       pr_uuid(&name, c->sb.user_uuid.b);
-       ret = name.allocation_failure ? -BCH_ERR_ENOMEM_fs_name_alloc : 0;
-       if (ret)
-               goto err;
-
-       strscpy(c->name, name.buf, sizeof(c->name));
-       printbuf_exit(&name);
-
        /* Compat: */
        if (le16_to_cpu(sb->version) <= bcachefs_metadata_version_inode_v2 &&
            !BCH_SB_JOURNAL_FLUSH_DELAY(sb))
@@ -902,6 +897,18 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, 
struct bch_opts opts)
                goto err;
        }
 
+       if (sbs->nr != 1)
+               pr_uuid(&name, c->sb.user_uuid.b);
+       else
+               prt_bdevname(&name, sbs->data[0].bdev);
+
+       ret = name.allocation_failure ? -BCH_ERR_ENOMEM_fs_name_alloc : 0;
+       if (ret)
+               goto err;
+
+       strscpy(c->name, name.buf, sizeof(c->name));
+       printbuf_exit(&name);
+
        iter_size = sizeof(struct sort_iter) +
                (btree_blocks(c) + 1) * 2 *
                sizeof(struct sort_iter_set);
@@ -1497,11 +1504,7 @@ static int bch2_dev_attach_bdev(struct bch_fs *c, struct 
bch_sb_handle *sb)
 
        struct printbuf name = PRINTBUF;
        prt_bdevname(&name, ca->disk_sb.bdev);
-
-       if (c->sb.nr_devices == 1)
-               strscpy(c->name, name.buf, sizeof(c->name));
        strscpy(ca->name, name.buf, sizeof(ca->name));
-
        printbuf_exit(&name);
 
        rebalance_wakeup(c);
@@ -2163,7 +2166,7 @@ static inline int sb_cmp(struct bch_sb *l, struct bch_sb 
*r)
 struct bch_fs *bch2_fs_open(char * const *devices, unsigned nr_devices,
                            struct bch_opts opts)
 {
-       DARRAY(struct bch_sb_handle) sbs = { 0 };
+       bch_sb_handles sbs = {};
        struct bch_fs *c = NULL;
        struct bch_sb_handle *best = NULL;
        struct printbuf errbuf = PRINTBUF;
@@ -2216,7 +2219,7 @@ struct bch_fs *bch2_fs_open(char * const *devices, 
unsigned nr_devices,
                        goto err_print;
        }
 
-       c = bch2_fs_alloc(best->sb, opts);
+       c = bch2_fs_alloc(best->sb, opts, &sbs);
        ret = PTR_ERR_OR_ZERO(c);
        if (ret)
                goto err;
-- 
2.49.0


Reply via email to