diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-09-10 22:42:30 +0200 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 23:10:12 +0200 |
commit | b030e262b517b6bddc4bfa88ed8d335ef9de7671 (patch) | |
tree | b0a1aea8f9773b926352e091f9d4a2c8ef31fcf5 /fs/bcachefs/io_misc.h | |
parent | bcachefs: BTREE_ID_logged_ops (diff) | |
download | linux-b030e262b517b6bddc4bfa88ed8d335ef9de7671.tar.xz linux-b030e262b517b6bddc4bfa88ed8d335ef9de7671.zip |
bcachefs: Log truncate operations
Previously, we guaranteed atomicity of truncate after unclean shutdown
with the BCH_INODE_I_SIZE_DIRTY flag - which required a full scan of the
inodes btree.
Recently the deleted inodes btree was added so that we no longer have to
scan for deleted inodes, but truncate was unfinished and that change
left it broken.
This patch uses the new logged operations btree to fix truncate
atomicity; we now log an operation that can be replayed at the start of
a truncate.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/io_misc.h')
-rw-r--r-- | fs/bcachefs/io_misc.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/bcachefs/io_misc.h b/fs/bcachefs/io_misc.h index 894a7a04ba4b..1b792451fff2 100644 --- a/fs/bcachefs/io_misc.h +++ b/fs/bcachefs/io_misc.h @@ -9,6 +9,15 @@ int bch2_fpunch_at(struct btree_trans *, struct btree_iter *, subvol_inum, u64, s64 *); int bch2_fpunch(struct bch_fs *c, subvol_inum, u64, u64, s64 *); +void bch2_logged_op_truncate_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c); + +#define bch2_bkey_ops_logged_op_truncate ((struct bkey_ops) { \ + .val_to_text = bch2_logged_op_truncate_to_text, \ + .min_val_size = 24, \ +}) + +int bch2_resume_logged_op_truncate(struct btree_trans *, struct bkey_i *); + int bch2_truncate(struct bch_fs *, subvol_inum, u64, u64 *); int bch2_fcollapse_finsert(struct bch_fs *, subvol_inum, u64, u64, bool, s64 *); |