bcachefs: Fix disk groups not being updated when set via sysfs
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 12 Aug 2020 19:00:08 +0000 (15:00 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:43 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/disk_groups.c
fs/bcachefs/disk_groups.h

index ee10308131e945db5f45606f7f06ebfc7a7d7044..1c30065833c2c2df20aeac053d7a9b68c52fa06a 100644 (file)
@@ -387,6 +387,7 @@ int bch2_dev_group_set(struct bch_fs *c, struct bch_dev *ca, const char *name)
 {
        struct bch_member *mi;
        int v = -1;
+       int ret = 0;
 
        mutex_lock(&c->sb_lock);
 
@@ -399,14 +400,18 @@ int bch2_dev_group_set(struct bch_fs *c, struct bch_dev *ca, const char *name)
                return v;
        }
 
+       ret = bch2_sb_disk_groups_to_cpu(c);
+       if (ret)
+               goto unlock;
 write_sb:
        mi = &bch2_sb_get_members(c->disk_sb.sb)->members[ca->dev_idx];
        SET_BCH_MEMBER_GROUP(mi, v + 1);
 
        bch2_write_super(c);
+unlock:
        mutex_unlock(&c->sb_lock);
 
-       return 0;
+       return ret;
 }
 
 int bch2_opt_target_parse(struct bch_fs *c, const char *buf, u64 *v)
index c8e0c37a5e1a49ebf7dac0864cc07c976b10bedc..3d84f23c34ed42ab2b13e7be4beafddceb3f7fbd 100644 (file)
@@ -71,7 +71,10 @@ static inline struct bch_devs_mask target_rw_devs(struct bch_fs *c,
 bool bch2_dev_in_target(struct bch_fs *, unsigned, unsigned);
 
 int bch2_disk_path_find(struct bch_sb_handle *, const char *);
+
+/* Exported for userspace bcachefs-tools: */
 int bch2_disk_path_find_or_create(struct bch_sb_handle *, const char *);
+
 void bch2_disk_path_to_text(struct printbuf *, struct bch_sb_handle *,
                            unsigned);