diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-01-24 17:54:51 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:15 -0400 |
commit | 3ccc5c50f29fb6934fb71e12983f1f2beabe29b9 (patch) | |
tree | c2c01b1592b4a0420e1c525d2fc3b8d4b933188d /fs/bcachefs/journal_io.c | |
parent | 2c5af169f72c1018e83b79ac82ffe387534910e8 (diff) | |
download | lwn-3ccc5c50f29fb6934fb71e12983f1f2beabe29b9.tar.gz lwn-3ccc5c50f29fb6934fb71e12983f1f2beabe29b9.zip |
bcachefs: Write out fs usage
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/journal_io.c')
-rw-r--r-- | fs/bcachefs/journal_io.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c index 173aecfaebc2..2f04f0074ec4 100644 --- a/fs/bcachefs/journal_io.c +++ b/fs/bcachefs/journal_io.c @@ -863,19 +863,6 @@ err: /* journal write: */ -static void bch2_journal_add_btree_root(struct journal_buf *buf, - enum btree_id id, struct bkey_i *k, - unsigned level) -{ - struct jset_entry *entry; - - entry = bch2_journal_add_entry_noreservation(buf, k->k.u64s); - entry->type = BCH_JSET_ENTRY_btree_root; - entry->btree_id = id; - entry->level = level; - memcpy_u64s(entry->_data, k, k->k.u64s); -} - static unsigned journal_dev_buckets_available(struct journal *j, struct journal_device *ja) { @@ -1206,25 +1193,27 @@ void bch2_journal_write(struct closure *cl) struct bch_fs *c = container_of(j, struct bch_fs, journal); struct bch_dev *ca; struct journal_buf *w = journal_prev_buf(j); + struct jset_entry *start, *end; struct jset *jset; struct bio *bio; struct bch_extent_ptr *ptr; bool validate_before_checksum = false; - unsigned i, sectors, bytes; + unsigned i, sectors, bytes, u64s; journal_buf_realloc(j, w); jset = w->data; j->write_start_time = local_clock(); - mutex_lock(&c->btree_root_lock); - for (i = 0; i < BTREE_ID_NR; i++) { - struct btree_root *r = &c->btree_roots[i]; - if (r->alive) - bch2_journal_add_btree_root(w, i, &r->key, r->level); - } - c->btree_roots_dirty = false; - mutex_unlock(&c->btree_root_lock); + start = vstruct_last(w->data); + end = bch2_journal_super_entries_add_common(c, start, + le64_to_cpu(jset->seq)); + u64s = (u64 *) end - (u64 *) start; + BUG_ON(u64s > j->entry_u64s_reserved); + + le32_add_cpu(&w->data->u64s, u64s); + BUG_ON(vstruct_sectors(jset, c->block_bits) > + w->disk_sectors); journal_write_compact(jset); |