summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-12-25 18:40:15 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2021-12-26 23:35:13 -0500
commit106b4e66467ef03b3f1dadf4e159454c1dcc7943 (patch)
tree56a093e42a25edd96815204f1c9ad60a1da0cf1d
parent764691cb187583673f058fc67759400a7544b03c (diff)
bcachefs: Fix bch2_journal_meta()
This patch ensures that the journal entry written gets written as flush entry, which is important for the shutdown path - the last entry written needs to be a flush entry. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/journal.c5
-rw-r--r--fs/bcachefs/journal_io.c2
-rw-r--r--fs/bcachefs/sysfs.c5
3 files changed, 6 insertions, 6 deletions
diff --git a/fs/bcachefs/journal.c b/fs/bcachefs/journal.c
index 6c1771b5828a..415cc53cf1db 100644
--- a/fs/bcachefs/journal.c
+++ b/fs/bcachefs/journal.c
@@ -642,6 +642,7 @@ int bch2_journal_flush_seq(struct journal *j, u64 seq)
int bch2_journal_meta(struct journal *j)
{
+ struct journal_buf *buf;
struct journal_res res;
int ret;
@@ -651,6 +652,10 @@ int bch2_journal_meta(struct journal *j)
if (ret)
return ret;
+ buf = j->buf + (res.seq & JOURNAL_BUF_MASK);
+ buf->must_flush = true;
+ set_bit(JOURNAL_NEED_WRITE, &j->flags);
+
bch2_journal_res_put(j, &res);
return bch2_journal_flush_seq(j, res.seq);
diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c
index 1fcc7ed5a776..e161e86e48c4 100644
--- a/fs/bcachefs/journal_io.c
+++ b/fs/bcachefs/journal_io.c
@@ -1448,7 +1448,7 @@ void bch2_journal_write(struct closure *cl)
SET_JSET_BIG_ENDIAN(jset, CPU_BIG_ENDIAN);
SET_JSET_CSUM_TYPE(jset, bch2_meta_checksum_type(c));
- if (journal_entry_empty(jset))
+ if (!JSET_NO_FLUSH(jset) && journal_entry_empty(jset))
j->last_empty_seq = le64_to_cpu(jset->seq);
if (bch2_csum_type_is_encryption(JSET_CSUM_TYPE(jset)))
diff --git a/fs/bcachefs/sysfs.c b/fs/bcachefs/sysfs.c
index 341ba3fdd6fc..1d1e2c6fc2e2 100644
--- a/fs/bcachefs/sysfs.c
+++ b/fs/bcachefs/sysfs.c
@@ -131,7 +131,6 @@ do { \
return strtoi_h(buf, &var) ?: (ssize_t) size; \
} while (0)
-write_attribute(trigger_journal_flush);
write_attribute(trigger_gc);
write_attribute(prune_cache);
rw_attribute(btree_gc_periodic);
@@ -482,9 +481,6 @@ STORE(bch2_fs)
/* Debugging: */
- if (attr == &sysfs_trigger_journal_flush)
- bch2_journal_meta(&c->journal);
-
if (attr == &sysfs_trigger_gc) {
/*
* Full gc is currently incompatible with btree key cache:
@@ -574,7 +570,6 @@ struct attribute *bch2_fs_internal_files[] = {
&sysfs_io_timers_read,
&sysfs_io_timers_write,
- &sysfs_trigger_journal_flush,
&sysfs_trigger_gc,
&sysfs_prune_cache,