From 32aabbc4e547592f957de7d4b093986e55981085 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 2 Apr 2022 16:36:29 -0400 Subject: [PATCH] Update bcachefs sources to ab3b6e7dd6 bcachefs: Fix pr_buf() calls --- .bcachefs_revision | 2 +- include/trace/events/bcachefs.h | 34 +++++++++++++++++++++++++++++++++ libbcachefs/alloc_background.c | 23 +++++++++++++++++++--- libbcachefs/compress.c | 2 -- libbcachefs/opts.c | 2 +- libbcachefs/util.h | 2 +- 6 files changed, 57 insertions(+), 8 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index a64663b..c72637c 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -5e392aed7aa06fd3476d1e5da1248f4d47867fc4 +ab3b6e7dd69c5cd5dfd96fd265ade6897720f671 diff --git a/include/trace/events/bcachefs.h b/include/trace/events/bcachefs.h index bccad83..f63a7c8 100644 --- a/include/trace/events/bcachefs.h +++ b/include/trace/events/bcachefs.h @@ -182,6 +182,40 @@ TRACE_EVENT(journal_reclaim_finish, __entry->nr_flushed) ); +/* allocator: */ + +TRACE_EVENT(do_discards, + TP_PROTO(struct bch_fs *c, u64 seen, u64 open, + u64 need_journal_commit, u64 discarded, int ret), + TP_ARGS(c, seen, open, need_journal_commit, discarded, ret), + + TP_STRUCT__entry( + __field(dev_t, dev ) + __field(u64, seen ) + __field(u64, open ) + __field(u64, need_journal_commit ) + __field(u64, discarded ) + __field(int, ret ) + ), + + TP_fast_assign( + __entry->dev = c->dev; + __entry->seen = seen; + __entry->open = open; + __entry->need_journal_commit = need_journal_commit; + __entry->discarded = discarded; + __entry->ret = ret; + ), + + TP_printk("%d%d seen %llu open %llu need_journal_commit %llu discarded %llu ret %i", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->seen, + __entry->open, + __entry->need_journal_commit, + __entry->discarded, + __entry->ret) +); + /* bset.c: */ DEFINE_EVENT(bpos, bkey_pack_pos_fail, diff --git a/libbcachefs/alloc_background.c b/libbcachefs/alloc_background.c index 1188239..e8a34ec 100644 --- a/libbcachefs/alloc_background.c +++ b/libbcachefs/alloc_background.c @@ -886,7 +886,7 @@ static int bch2_clear_need_discard(struct btree_trans *trans, struct bpos pos, GFP_KERNEL, 0); *discard_done = true; - ret = bch2_trans_relock(trans); + ret = bch2_trans_relock(trans) ? 0 : -EINTR; if (ret) goto out; } @@ -907,6 +907,7 @@ static void bch2_do_discards_work(struct work_struct *work) struct btree_trans trans; struct btree_iter iter; struct bkey_s_c k; + u64 seen = 0, open = 0, need_journal_commit = 0, discarded = 0; int ret; bch2_trans_init(&trans, c, 0, 0); @@ -929,11 +930,19 @@ static void bch2_do_discards_work(struct work_struct *work) } } + seen++; + + if (bch2_bucket_is_open_safe(c, k.k->p.inode, k.k->p.offset)) { + open++; + continue; + } + if (bch2_bucket_needs_journal_commit(&c->buckets_waiting_for_journal, c->journal.flushed_seq_ondisk, - k.k->p.inode, k.k->p.offset) || - bch2_bucket_is_open_safe(c, k.k->p.inode, k.k->p.offset)) + k.k->p.inode, k.k->p.offset)) { + need_journal_commit++; continue; + } ret = __bch2_trans_do(&trans, NULL, NULL, BTREE_INSERT_USE_RESERVE| @@ -941,6 +950,8 @@ static void bch2_do_discards_work(struct work_struct *work) bch2_clear_need_discard(&trans, k.k->p, ca, &discard_done)); if (ret) break; + + discarded++; } bch2_trans_iter_exit(&trans, &iter); @@ -948,7 +959,13 @@ static void bch2_do_discards_work(struct work_struct *work) percpu_ref_put(&ca->io_ref); bch2_trans_exit(&trans); + + if (need_journal_commit * 2 > seen) + bch2_journal_flush_async(&c->journal, NULL); + percpu_ref_put(&c->writes); + + trace_do_discards(c, seen, open, need_journal_commit, discarded, ret); } void bch2_do_discards(struct bch_fs *c) diff --git a/libbcachefs/compress.c b/libbcachefs/compress.c index 7d9ebcc..f692f35 100644 --- a/libbcachefs/compress.c +++ b/libbcachefs/compress.c @@ -199,8 +199,6 @@ static int __bio_uncompress(struct bch_fs *c, struct bio *src, workspace = mempool_alloc(&c->decompress_workspace, GFP_NOIO); ctx = zstd_init_dctx(workspace, zstd_dctx_workspace_bound()); - src_len = le32_to_cpup(src_data.b); - ret = zstd_decompress_dctx(ctx, dst_data, dst_len, src_data.b + 4, real_src_len); diff --git a/libbcachefs/opts.c b/libbcachefs/opts.c index 77fbb7d..385451e 100644 --- a/libbcachefs/opts.c +++ b/libbcachefs/opts.c @@ -324,7 +324,7 @@ void bch2_opt_to_text(struct printbuf *out, if (flags & OPT_SHOW_FULL_LIST) bch2_string_opt_to_text(out, opt->choices, v); else - pr_buf(out, opt->choices[v]); + pr_buf(out, "%s", opt->choices[v]); break; case BCH_OPT_FN: opt->to_text(out, c, sb, v); diff --git a/libbcachefs/util.h b/libbcachefs/util.h index 8886937..086d941 100644 --- a/libbcachefs/util.h +++ b/libbcachefs/util.h @@ -386,7 +386,7 @@ static inline void pr_uuid(struct printbuf *out, u8 *uuid) char uuid_str[40]; uuid_unparse_lower(uuid, uuid_str); - pr_buf(out, uuid_str); + pr_buf(out, "%s", uuid_str); } int bch2_strtoint_h(const char *, int *); -- 2.39.2