summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-09-27 13:32:44 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-09-27 13:32:44 -0400
commit49ba8d0ef6133487559bdc73f2afc87fbea85fe0 (patch)
treed11e9d847a983eaeddfd167d36d0e5d6546cb40f
parentd214908864b3d245a265f029a29a1eb731834e3c (diff)
Update bcachefs sources to 6c5219caf0 bcachefs: Rev the on disk format version for snapshotsv0.15
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/bcachefs_format.h3
-rw-r--r--libbcachefs/btree_update_interior.c3
-rw-r--r--libbcachefs/recovery.c21
4 files changed, 13 insertions, 16 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index 76bc7256..3d1868cd 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-386f00b6399a1eb38053c236aae87678f3535df7
+6c5219caf0cc4a917298fcea5483b9bac2dacc90
diff --git a/libbcachefs/bcachefs_format.h b/libbcachefs/bcachefs_format.h
index c082d5fc..0b8eabe5 100644
--- a/libbcachefs/bcachefs_format.h
+++ b/libbcachefs/bcachefs_format.h
@@ -1258,7 +1258,8 @@ enum bcachefs_metadata_version {
bcachefs_metadata_version_snapshot = 12,
bcachefs_metadata_version_inode_backpointers = 13,
bcachefs_metadata_version_btree_ptr_sectors_written = 14,
- bcachefs_metadata_version_max = 15,
+ bcachefs_metadata_version_snapshot_2 = 15,
+ bcachefs_metadata_version_max = 16,
};
#define bcachefs_metadata_version_current (bcachefs_metadata_version_max - 1)
diff --git a/libbcachefs/btree_update_interior.c b/libbcachefs/btree_update_interior.c
index 5a1420b3..c54e6b46 100644
--- a/libbcachefs/btree_update_interior.c
+++ b/libbcachefs/btree_update_interior.c
@@ -165,7 +165,8 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans,
struct btree_path *path;
trans_for_each_path(trans, path)
- BUG_ON(path->l[b->c.level].b == b);
+ BUG_ON(path->l[b->c.level].b == b &&
+ path->l[b->c.level].lock_seq == b->c.lock.state.seq);
six_lock_write(&b->c.lock, NULL, NULL);
diff --git a/libbcachefs/recovery.c b/libbcachefs/recovery.c
index 64e0b542..6afb37a2 100644
--- a/libbcachefs/recovery.c
+++ b/libbcachefs/recovery.c
@@ -1004,11 +1004,10 @@ static int bch2_fs_upgrade_for_subvolumes(struct btree_trans *trans)
struct btree_iter iter;
struct bkey_s_c k;
struct bch_inode_unpacked inode;
- struct bkey_inode_buf *packed;
int ret;
bch2_trans_iter_init(trans, &iter, BTREE_ID_inodes,
- POS(0, BCACHEFS_ROOT_INO), 0);
+ SPOS(0, BCACHEFS_ROOT_INO, U32_MAX), 0);
k = bch2_btree_iter_peek_slot(&iter);
ret = bkey_err(k);
if (ret)
@@ -1025,13 +1024,7 @@ static int bch2_fs_upgrade_for_subvolumes(struct btree_trans *trans)
inode.bi_subvol = BCACHEFS_ROOT_SUBVOL;
- packed = bch2_trans_kmalloc(trans, sizeof(*packed));
- ret = PTR_ERR_OR_ZERO(packed);
- if (ret)
- goto err;
-
- bch2_inode_pack(c, packed, &inode);
- ret = bch2_trans_update(trans, &iter, &packed->inode.k_i, 0);
+ ret = bch2_inode_write(trans, &iter, &inode);
err:
bch2_trans_iter_exit(trans, &iter);
return ret;
@@ -1096,8 +1089,8 @@ int bch2_fs_recovery(struct bch_fs *c)
} else if (c->sb.version < bcachefs_metadata_version_btree_ptr_sectors_written) {
bch_info(c, "version prior to btree_ptr_sectors_written, upgrade required");
c->opts.version_upgrade = true;
- } else if (c->sb.version < bcachefs_metadata_version_snapshot) {
- bch_info(c, "filesystem version is prior to snapshot field - upgrading");
+ } else if (c->sb.version < bcachefs_metadata_version_snapshot_2) {
+ bch_info(c, "filesystem version is prior to snapshots - upgrading");
c->opts.version_upgrade = true;
}
@@ -1267,7 +1260,9 @@ use_clean:
bch_verbose(c, "alloc write done");
}
- if (c->sb.version < bcachefs_metadata_version_snapshot) {
+ if (c->sb.version < bcachefs_metadata_version_snapshot_2) {
+ bch2_fs_lazy_rw(c);
+
err = "error creating root snapshot node";
ret = bch2_fs_initialize_subvolumes(c);
if (ret)
@@ -1281,7 +1276,7 @@ use_clean:
goto err;
bch_verbose(c, "reading snapshots done");
- if (c->sb.version < bcachefs_metadata_version_snapshot) {
+ if (c->sb.version < bcachefs_metadata_version_snapshot_2) {
/* set bi_subvol on root inode */
err = "error upgrade root inode for subvolumes";
ret = bch2_trans_do(c, NULL, NULL, BTREE_INSERT_LAZY_RW,