bcachefs: make durability a read-write sysfs option
authorDaniel Hill <daniel@gluo.nz>
Wed, 25 May 2022 04:11:56 +0000 (16:11 +1200)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:44 +0000 (17:09 -0400)
Sometimes the user may need to change durability after formatting to
match current hardware setup, this option provides a quick and flexible
alternative to removing then adding the device.
It is HIGHLY ADVISED TO RUN REREPLICATE after changing this value so the
system doesn't remain degraded.

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

index a27ceabd5e49697829fbcbca1be1c098afd3a9d2..76301209898f15294c6c6156c33f02e31646030c 100644 (file)
@@ -174,7 +174,7 @@ read_attribute(minor);
 read_attribute(bucket_size);
 read_attribute(first_bucket);
 read_attribute(nbuckets);
-read_attribute(durability);
+rw_attribute(durability);
 read_attribute(iodone);
 
 read_attribute(io_latency_read);
@@ -911,6 +911,19 @@ STORE(bch2_dev)
                mutex_unlock(&c->sb_lock);
        }
 
+       if (attr == &sysfs_durability) {
+               u64 v = strtoul_or_return(buf);
+
+               mutex_lock(&c->sb_lock);
+               mi = &bch2_sb_get_members(c->disk_sb.sb)->members[ca->dev_idx];
+
+               if (v != BCH_MEMBER_DURABILITY(mi)) {
+                       SET_BCH_MEMBER_DURABILITY(mi, v + 1);
+                       bch2_write_super(c);
+               }
+               mutex_unlock(&c->sb_lock);
+       }
+
        if (attr == &sysfs_label) {
                char *tmp;
                int ret;