]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/sb-members.c
Update bcachefs sources to bee7b5a4fa21 bcachefs: Pin btree cache in ram for random...
[bcachefs-tools-debian] / libbcachefs / sb-members.c
index ab5de12eca4acdf230a4e26fee884cff059c6ef8..a45354d2acde9f3ad0b149247c8ff4c7c869fb15 100644 (file)
@@ -21,19 +21,14 @@ char * const bch2_member_error_strs[] = {
 
 /* Code for bch_sb_field_members_v1: */
 
-static struct bch_member *members_v2_get_mut(struct bch_sb_field_members_v2 *mi, int i)
-{
-       return (void *) mi->_members + (i * le16_to_cpu(mi->member_bytes));
-}
-
 struct bch_member *bch2_members_v2_get_mut(struct bch_sb *sb, int i)
 {
-       return members_v2_get_mut(bch2_sb_field_get(sb, members_v2), i);
+       return __bch2_members_v2_get_mut(bch2_sb_field_get(sb, members_v2), i);
 }
 
 static struct bch_member members_v2_get(struct bch_sb_field_members_v2 *mi, int i)
 {
-       struct bch_member ret, *p = members_v2_get_mut(mi, i);
+       struct bch_member ret, *p = __bch2_members_v2_get_mut(mi, i);
        memset(&ret, 0, sizeof(ret));
        memcpy(&ret, p, min_t(size_t, le16_to_cpu(mi->member_bytes), sizeof(ret)));
        return ret;
@@ -75,7 +70,7 @@ static int sb_members_v2_resize_entries(struct bch_fs *c)
 
                for (int i = c->disk_sb.sb->nr_devices - 1; i >= 0; --i) {
                        void *dst = (void *) mi->_members + (i * sizeof(struct bch_member));
-                       memmove(dst, members_v2_get_mut(mi, i), le16_to_cpu(mi->member_bytes));
+                       memmove(dst, __bch2_members_v2_get_mut(mi, i), le16_to_cpu(mi->member_bytes));
                        memset(dst + le16_to_cpu(mi->member_bytes),
                               0, (sizeof(struct bch_member) - le16_to_cpu(mi->member_bytes)));
                }
@@ -118,7 +113,7 @@ int bch2_sb_members_cpy_v2_v1(struct bch_sb_handle *disk_sb)
        mi2 = bch2_sb_field_get(disk_sb->sb, members_v2);
 
        for (unsigned i = 0; i < disk_sb->sb->nr_devices; i++)
-               memcpy(members_v1_get_mut(mi1, i), members_v2_get_mut(mi2, i), BCH_MEMBER_V1_BYTES);
+               memcpy(members_v1_get_mut(mi1, i), __bch2_members_v2_get_mut(mi2, i), BCH_MEMBER_V1_BYTES);
 
        return 0;
 }
@@ -235,11 +230,16 @@ static void member_to_text(struct printbuf *out,
        prt_printf(out, "Last mount:");
        prt_tab(out);
        if (m.last_mount)
-               pr_time(out, le64_to_cpu(m.last_mount));
+               bch2_prt_datetime(out, le64_to_cpu(m.last_mount));
        else
                prt_printf(out, "(never)");
        prt_newline(out);
 
+       prt_printf(out, "Last superblock write:");
+       prt_tab(out);
+       prt_u64(out, le64_to_cpu(m.seq));
+       prt_newline(out);
+
        prt_printf(out, "State:");
        prt_tab(out);
        prt_printf(out, "%s",
@@ -251,7 +251,7 @@ static void member_to_text(struct printbuf *out,
        prt_printf(out, "Data allowed:");
        prt_tab(out);
        if (BCH_MEMBER_DATA_ALLOWED(&m))
-               prt_bitflags(out, bch2_data_types, BCH_MEMBER_DATA_ALLOWED(&m));
+               prt_bitflags(out, __bch2_data_types, BCH_MEMBER_DATA_ALLOWED(&m));
        else
                prt_printf(out, "(none)");
        prt_newline(out);
@@ -259,11 +259,16 @@ static void member_to_text(struct printbuf *out,
        prt_printf(out, "Has data:");
        prt_tab(out);
        if (data_have)
-               prt_bitflags(out, bch2_data_types, data_have);
+               prt_bitflags(out, __bch2_data_types, data_have);
        else
                prt_printf(out, "(none)");
        prt_newline(out);
 
+       prt_str(out, "Durability:");
+       prt_tab(out);
+       prt_printf(out, "%llu", BCH_MEMBER_DURABILITY(&m) ? BCH_MEMBER_DURABILITY(&m) - 1 : 1);
+       prt_newline(out);
+
        prt_printf(out, "Discard:");
        prt_tab(out);
        prt_printf(out, "%llu", BCH_MEMBER_DISCARD(&m));
@@ -332,7 +337,7 @@ static int bch2_sb_members_v2_validate(struct bch_sb *sb,
                                       struct printbuf *err)
 {
        struct bch_sb_field_members_v2 *mi = field_to_type(f, members_v2);
-       size_t mi_bytes = (void *) members_v2_get_mut(mi, sb->nr_devices) -
+       size_t mi_bytes = (void *) __bch2_members_v2_get_mut(mi, sb->nr_devices) -
                (void *) mi;
 
        if (mi_bytes > vstruct_bytes(&mi->field)) {
@@ -358,14 +363,12 @@ const struct bch_sb_field_ops bch_sb_field_ops_members_v2 = {
 void bch2_sb_members_from_cpu(struct bch_fs *c)
 {
        struct bch_sb_field_members_v2 *mi = bch2_sb_field_get(c->disk_sb.sb, members_v2);
-       struct bch_dev *ca;
-       unsigned i, e;
 
        rcu_read_lock();
-       for_each_member_device_rcu(ca, c, i, NULL) {
-               struct bch_member *m = members_v2_get_mut(mi, i);
+       for_each_member_device_rcu(c, ca, NULL) {
+               struct bch_member *m = __bch2_members_v2_get_mut(mi, ca->dev_idx);
 
-               for (e = 0; e < BCH_MEMBER_ERROR_NR; e++)
+               for (unsigned e = 0; e < BCH_MEMBER_ERROR_NR; e++)
                        m->errors[e] = cpu_to_le64(atomic64_read(&ca->errors[e]));
        }
        rcu_read_unlock();