]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/journal_seq_blacklist.c
Update upstream source from tag 'v1.6.3'
[bcachefs-tools-debian] / libbcachefs / journal_seq_blacklist.c
index 5c555b3703c0947006176f11ce9736717e9275d9..024c9b1b323f842879d923bc827ce1d7764d6e0a 100644 (file)
@@ -2,10 +2,11 @@
 
 #include "bcachefs.h"
 #include "btree_iter.h"
-#include "eytzinger.h"
 #include "journal_seq_blacklist.h"
 #include "super-io.h"
 
+#include <linux/eytzinger.h>
+
 /*
  * journal_seq_blacklist machinery:
  *
@@ -58,8 +59,8 @@ blacklist_entry_try_merge(struct bch_fs *c,
                        &bl->start[i + 1],
                        sizeof(bl->start[0]) * (nr - i));
 
-               bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
-                                                       sb_blacklist_u64s(nr));
+               bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
+                                         sb_blacklist_u64s(nr));
                BUG_ON(!bl);
        }
 
@@ -79,7 +80,7 @@ int bch2_journal_seq_blacklist_add(struct bch_fs *c, u64 start, u64 end)
        int ret = 0;
 
        mutex_lock(&c->sb_lock);
-       bl = bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
+       bl = bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
        nr = blacklist_nr_entries(bl);
 
        for (i = 0; i < nr; i++) {
@@ -100,10 +101,10 @@ int bch2_journal_seq_blacklist_add(struct bch_fs *c, u64 start, u64 end)
                }
        }
 
-       bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
-                                       sb_blacklist_u64s(nr + 1));
+       bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
+                                 sb_blacklist_u64s(nr + 1));
        if (!bl) {
-               ret = -ENOMEM;
+               ret = -BCH_ERR_ENOSPC_sb_journal_seq_blacklist;
                goto out;
        }
 
@@ -119,8 +120,7 @@ out:
        return ret ?: bch2_blacklist_table_initialize(c);
 }
 
-static int journal_seq_blacklist_table_cmp(const void *_l,
-                                          const void *_r, size_t size)
+static int journal_seq_blacklist_table_cmp(const void *_l, const void *_r)
 {
        const struct journal_seq_blacklist_table_entry *l = _l;
        const struct journal_seq_blacklist_table_entry *r = _r;
@@ -158,7 +158,7 @@ bool bch2_journal_seq_is_blacklisted(struct bch_fs *c, u64 seq,
 int bch2_blacklist_table_initialize(struct bch_fs *c)
 {
        struct bch_sb_field_journal_seq_blacklist *bl =
-               bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
+               bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
        struct journal_seq_blacklist_table *t;
        unsigned i, nr = blacklist_nr_entries(bl);
 
@@ -168,7 +168,7 @@ int bch2_blacklist_table_initialize(struct bch_fs *c)
        t = kzalloc(sizeof(*t) + sizeof(t->entries[0]) * nr,
                    GFP_KERNEL);
        if (!t)
-               return -ENOMEM;
+               return -BCH_ERR_ENOMEM_blacklist_table_init;
 
        t->nr = nr;
 
@@ -203,7 +203,7 @@ static int bch2_sb_journal_seq_blacklist_validate(struct bch_sb *sb,
                    le64_to_cpu(e->end)) {
                        prt_printf(err, "entry %u start >= end (%llu >= %llu)",
                               i, le64_to_cpu(e->start), le64_to_cpu(e->end));
-                       return -EINVAL;
+                       return -BCH_ERR_invalid_sb_journal_seq_blacklist;
                }
 
                if (i + 1 < nr &&
@@ -211,7 +211,7 @@ static int bch2_sb_journal_seq_blacklist_validate(struct bch_sb *sb,
                    le64_to_cpu(e[1].start)) {
                        prt_printf(err, "entry %u out of order with next entry (%llu > %llu)",
                               i + 1, le64_to_cpu(e[0].end), le64_to_cpu(e[1].start));
-                       return -EINVAL;
+                       return -BCH_ERR_invalid_sb_journal_seq_blacklist;
                }
        }
 
@@ -250,40 +250,38 @@ void bch2_blacklist_entries_gc(struct work_struct *work)
        struct journal_seq_blacklist_table *t;
        struct bch_sb_field_journal_seq_blacklist *bl;
        struct journal_seq_blacklist_entry *src, *dst;
-       struct btree_trans trans;
+       struct btree_trans *trans = bch2_trans_get(c);
        unsigned i, nr, new_nr;
        int ret;
 
-       bch2_trans_init(&trans, c, 0, 0);
-
        for (i = 0; i < BTREE_ID_NR; i++) {
                struct btree_iter iter;
                struct btree *b;
 
-               bch2_trans_node_iter_init(&trans, &iter, i, POS_MIN,
+               bch2_trans_node_iter_init(trans, &iter, i, POS_MIN,
                                          0, 0, BTREE_ITER_PREFETCH);
 retry:
-               bch2_trans_begin(&trans);
+               bch2_trans_begin(trans);
 
                b = bch2_btree_iter_peek_node(&iter);
 
                while (!(ret = PTR_ERR_OR_ZERO(b)) &&
                       b &&
-                      !test_bit(BCH_FS_STOPPING, &c->flags))
+                      !test_bit(BCH_FS_stopping, &c->flags))
                        b = bch2_btree_iter_next_node(&iter);
 
                if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
                        goto retry;
 
-               bch2_trans_iter_exit(&trans, &iter);
+               bch2_trans_iter_exit(trans, &iter);
        }
 
-       bch2_trans_exit(&trans);
+       bch2_trans_put(trans);
        if (ret)
                return;
 
        mutex_lock(&c->sb_lock);
-       bl = bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
+       bl = bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
        if (!bl)
                goto out;
 
@@ -308,7 +306,7 @@ retry:
        bch_info(c, "nr blacklist entries was %u, now %u", nr, new_nr);
 
        if (new_nr != nr) {
-               bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
+               bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
                                new_nr ? sb_blacklist_u64s(new_nr) : 0);
                BUG_ON(new_nr && !bl);