]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/move.c
Update bcachefs sources to 2a6125decb43 bcachefs: bch_sb_field_downgrade
[bcachefs-tools-debian] / libbcachefs / move.c
index 5ed9f53b8134e88c3e4232dd56efb8441f59ca2a..7a33319dcd168001594f6532bafe0caf92f83c22 100644 (file)
@@ -372,13 +372,10 @@ struct bch_io_opts *bch2_move_get_io_opts(struct btree_trans *trans,
        int ret = 0;
 
        if (io_opts->cur_inum != extent_k.k->p.inode) {
-               struct btree_iter iter;
-               struct bkey_s_c k;
-
                io_opts->d.nr = 0;
 
-               for_each_btree_key(trans, iter, BTREE_ID_inodes, POS(0, extent_k.k->p.inode),
-                                  BTREE_ITER_ALL_SNAPSHOTS, k, ret) {
+               ret = for_each_btree_key(trans, iter, BTREE_ID_inodes, POS(0, extent_k.k->p.inode),
+                                        BTREE_ITER_ALL_SNAPSHOTS, k, ({
                        if (k.k->p.offset != extent_k.k->p.inode)
                                break;
 
@@ -391,11 +388,8 @@ struct bch_io_opts *bch2_move_get_io_opts(struct btree_trans *trans,
                        struct snapshot_io_opts_entry e = { .snapshot = k.k->p.snapshot };
                        bch2_inode_opts_get(&e.io_opts, trans->c, &inode);
 
-                       ret = darray_push(&io_opts->d, e);
-                       if (ret)
-                               break;
-               }
-               bch2_trans_iter_exit(trans, &iter);
+                       darray_push(&io_opts->d, e);
+               }));
                io_opts->cur_inum = extent_k.k->p.inode;
        }
 
@@ -403,12 +397,10 @@ struct bch_io_opts *bch2_move_get_io_opts(struct btree_trans *trans,
        if (ret)
                return ERR_PTR(ret);
 
-       if (extent_k.k->p.snapshot) {
-               struct snapshot_io_opts_entry *i;
+       if (extent_k.k->p.snapshot)
                darray_for_each(io_opts->d, i)
                        if (bch2_snapshot_is_ancestor(c, extent_k.k->p.snapshot, i->snapshot))
                                return &i->io_opts;
-       }
 
        return &io_opts->fs_io_opts;
 }
@@ -449,25 +441,26 @@ int bch2_move_get_io_opts_one(struct btree_trans *trans,
 int bch2_move_ratelimit(struct moving_context *ctxt)
 {
        struct bch_fs *c = ctxt->trans->c;
+       bool is_kthread = current->flags & PF_KTHREAD;
        u64 delay;
 
        if (ctxt->wait_on_copygc && c->copygc_running) {
                bch2_moving_ctxt_flush_all(ctxt);
                wait_event_killable(c->copygc_running_wq,
                                    !c->copygc_running ||
-                                   kthread_should_stop());
+                                   (is_kthread && kthread_should_stop()));
        }
 
        do {
                delay = ctxt->rate ? bch2_ratelimit_delay(ctxt->rate) : 0;
 
-               if (kthread_should_stop())
+               if (is_kthread && kthread_should_stop())
                        return 1;
 
                if (delay)
                        move_ctxt_wait_event_timeout(ctxt,
                                        freezing(current) ||
-                                       kthread_should_stop(),
+                                       (is_kthread && kthread_should_stop()),
                                        delay);
 
                if (unlikely(freezing(current))) {
@@ -642,6 +635,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
 {
        struct btree_trans *trans = ctxt->trans;
        struct bch_fs *c = trans->c;
+       bool is_kthread = current->flags & PF_KTHREAD;
        struct bch_io_opts io_opts = bch2_opts_to_inode_opts(c->opts);
        struct btree_iter iter;
        struct bkey_buf sk;
@@ -670,10 +664,9 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
                        bkey_err(k = bch2_btree_iter_peek_slot(&iter)));
        bch2_trans_iter_exit(trans, &iter);
 
-       if (ret) {
-               bch_err_msg(c, ret, "looking up alloc key");
+       bch_err_msg(c, ret, "looking up alloc key");
+       if (ret)
                goto err;
-       }
 
        a = bch2_alloc_to_v4(k, &a_convert);
        dirty_sectors = bch2_bucket_sectors_dirty(*a);
@@ -686,7 +679,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
                goto err;
 
        while (!(ret = bch2_move_ratelimit(ctxt))) {
-               if (kthread_should_stop())
+               if (is_kthread && kthread_should_stop())
                        break;
 
                bch2_trans_begin(trans);
@@ -702,9 +695,6 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
                        break;
 
                if (!bp.level) {
-                       const struct bch_extent_ptr *ptr;
-                       unsigned i = 0;
-
                        k = bch2_backpointer_get_key(trans, &iter, bp_pos, bp, 0);
                        ret = bkey_err(k);
                        if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
@@ -727,6 +717,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
                        data_opts.target        = io_opts.background_target;
                        data_opts.rewrite_ptrs = 0;
 
+                       unsigned i = 0;
                        bkey_for_each_ptr(bch2_bkey_ptrs_c(k), ptr) {
                                if (ptr->dev == bucket.inode) {
                                        data_opts.rewrite_ptrs |= 1U << i;
@@ -804,6 +795,7 @@ static int bch2_move_btree(struct bch_fs *c,
                           move_btree_pred pred, void *arg,
                           struct bch_move_stats *stats)
 {
+       bool kthread = (current->flags & PF_KTHREAD) != 0;
        struct bch_io_opts io_opts = bch2_opts_to_inode_opts(c->opts);
        struct moving_context ctxt;
        struct btree_trans *trans;
@@ -835,7 +827,7 @@ retry:
                while (bch2_trans_begin(trans),
                       (b = bch2_btree_iter_peek_node(&iter)) &&
                       !(ret = PTR_ERR_OR_ZERO(b))) {
-                       if (kthread_should_stop())
+                       if (kthread && kthread_should_stop())
                                break;
 
                        if ((cmp_int(btree, end.btree) ?:
@@ -860,7 +852,7 @@ next:
 
                bch2_trans_iter_exit(trans, &iter);
 
-               if (kthread_should_stop())
+               if (kthread && kthread_should_stop())
                        break;
        }
 
@@ -896,7 +888,6 @@ static bool migrate_pred(struct bch_fs *c, void *arg,
                         struct data_update_opts *data_opts)
 {
        struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
-       const struct bch_extent_ptr *ptr;
        struct bch_ioctl_data *op = arg;
        unsigned i = 0;