]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Update bcachefs sources to ab3b6e7dd6 bcachefs: Fix pr_buf() calls
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 2 Apr 2022 20:36:29 +0000 (16:36 -0400)
committerKent Overstreet <kent.overstreet@gmail.com>
Sat, 2 Apr 2022 20:36:29 +0000 (16:36 -0400)
.bcachefs_revision
include/trace/events/bcachefs.h
libbcachefs/alloc_background.c
libbcachefs/compress.c
libbcachefs/opts.c
libbcachefs/util.h

index a64663bcd9a7c8187df51de5d04b5485b25b5fa0..c72637c5e4bce5d23829bfd319e06a4a7e15b305 100644 (file)
@@ -1 +1 @@
-5e392aed7aa06fd3476d1e5da1248f4d47867fc4
+ab3b6e7dd69c5cd5dfd96fd265ade6897720f671
index bccad83da05bb029f23a639676e82cc0a3d17530..f63a7c87265d6f8f27251a68724c633306651f44 100644 (file)
@@ -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,
index 1188239a1bcc4a8ec16ecb6187b5cdb9fbe28e59..e8a34eccac256f3a0d100569b1c855d7edb7b898 100644 (file)
@@ -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)
index 7d9ebcc9a4457bcf28a567e4fd28552c7f3d6e9d..f692f35a6a98e735784c9a856b4833c67d834aff 100644 (file)
@@ -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);
index 77fbb7d2194e956738e91385066f99b7019fee24..385451ef865ef086d624b8ddac5d49c509376a79 100644 (file)
@@ -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);
index 888693703c75b10ecc034713290f383a46859350..086d941f23e59648829f087a4c7565db979bd0ba 100644 (file)
@@ -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 *);