bcachefs: bcachefs_metadata_version_disk_accounting_v3
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 9 Aug 2024 04:25:25 +0000 (00:25 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 9 Aug 2024 23:21:28 +0000 (19:21 -0400)
bcachefs_metadata_version_disk_accounting_v2 erroneously had padding
bytes in disk_accounting_key, which is a problem because we have to
guarantee that all unused bytes in disk_accounting_key are zeroed.

Fortunately 6.11 isn't out yet, so it's cheap to fix this by spinning a
new version.

Reported-by: Gabriel de Perthuis <g2p.code@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/disk_accounting_format.h
fs/bcachefs/sb-downgrade.c

index ad89368..b25f863 100644 (file)
@@ -675,7 +675,8 @@ struct bch_sb_field_ext {
        x(btree_subvolume_children,     BCH_VERSION(1,  6))             \
        x(mi_btree_bitmap,              BCH_VERSION(1,  7))             \
        x(bucket_stripe_sectors,        BCH_VERSION(1,  8))             \
-       x(disk_accounting_v2,           BCH_VERSION(1,  9))
+       x(disk_accounting_v2,           BCH_VERSION(1,  9))             \
+       x(disk_accounting_v3,           BCH_VERSION(1, 10))
 
 enum bcachefs_metadata_version {
        bcachefs_metadata_version_min = 9,
index 848f06c..a93cf26 100644 (file)
@@ -130,11 +130,11 @@ struct bch_acct_compression {
 
 struct bch_acct_snapshot {
        __u32                   id;
-};
+} __packed;
 
 struct bch_acct_btree {
        __u32                   id;
-};
+} __packed;
 
 struct bch_acct_rebalance_work {
 };
@@ -152,8 +152,8 @@ struct disk_accounting_pos {
                struct bch_acct_snapshot        snapshot;
                struct bch_acct_btree           btree;
                struct bch_acct_rebalance_work  rebalance_work;
-               };
-       };
+               } __packed;
+       } __packed;
                struct bpos                     _pad;
        };
 };
index dfbbd33..6c4469f 100644 (file)
          BCH_FSCK_ERR_dev_usage_buckets_wrong,                 \
          BCH_FSCK_ERR_dev_usage_sectors_wrong,                 \
          BCH_FSCK_ERR_dev_usage_fragmented_wrong,              \
-         BCH_FSCK_ERR_accounting_mismatch)
+         BCH_FSCK_ERR_accounting_mismatch)                     \
+       x(disk_accounting_v3,                                   \
+         BIT_ULL(BCH_RECOVERY_PASS_check_allocations),         \
+         BCH_FSCK_ERR_bkey_version_in_future,                  \
+         BCH_FSCK_ERR_dev_usage_buckets_wrong,                 \
+         BCH_FSCK_ERR_dev_usage_sectors_wrong,                 \
+         BCH_FSCK_ERR_dev_usage_fragmented_wrong,              \
+         BCH_FSCK_ERR_accounting_mismatch,                     \
+         BCH_FSCK_ERR_accounting_key_replicas_nr_devs_0,       \
+         BCH_FSCK_ERR_accounting_key_replicas_nr_required_bad, \
+         BCH_FSCK_ERR_accounting_key_replicas_devs_unsorted,   \
+         BCH_FSCK_ERR_accounting_key_junk_at_end)
 
 #define DOWNGRADE_TABLE()                                      \
        x(bucket_stripe_sectors,                                \
          0)                                                    \
        x(disk_accounting_v2,                                   \
+         BIT_ULL(BCH_RECOVERY_PASS_check_allocations),         \
+         BCH_FSCK_ERR_dev_usage_buckets_wrong,                 \
+         BCH_FSCK_ERR_dev_usage_sectors_wrong,                 \
+         BCH_FSCK_ERR_dev_usage_fragmented_wrong,              \
+         BCH_FSCK_ERR_fs_usage_hidden_wrong,                   \
+         BCH_FSCK_ERR_fs_usage_btree_wrong,                    \
+         BCH_FSCK_ERR_fs_usage_data_wrong,                     \
+         BCH_FSCK_ERR_fs_usage_cached_wrong,                   \
+         BCH_FSCK_ERR_fs_usage_reserved_wrong,                 \
+         BCH_FSCK_ERR_fs_usage_nr_inodes_wrong,                \
+         BCH_FSCK_ERR_fs_usage_persistent_reserved_wrong,      \
+         BCH_FSCK_ERR_fs_usage_replicas_wrong,                 \
+         BCH_FSCK_ERR_bkey_version_in_future)                  \
+       x(disk_accounting_v3,                                   \
          BIT_ULL(BCH_RECOVERY_PASS_check_allocations),         \
          BCH_FSCK_ERR_dev_usage_buckets_wrong,                 \
          BCH_FSCK_ERR_dev_usage_sectors_wrong,                 \