-1336a995cbc3a575002ed517c4d27c847ecb6496
+a1b6677dca574a8bf904d9eea2b108474dc378d1
printk_ratelimited(KERN_ERR bch2_fmt_inum_offset(c, _inum, _offset, fmt), ##__VA_ARGS__)
#define bch_err_fn(_c, _ret) \
- bch_err(_c, "%s(): error %s", __func__, bch2_err_str(_ret))
+do { \
+ if (_ret && !bch2_err_matches(_ret, BCH_ERR_transaction_restart))\
+ bch_err(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
+} while (0)
+
#define bch_err_msg(_c, _ret, _msg, ...) \
- bch_err(_c, "%s(): error " _msg " %s", __func__, ##__VA_ARGS__, bch2_err_str(_ret))
+do { \
+ if (_ret && !bch2_err_matches(_ret, BCH_ERR_transaction_restart))\
+ bch_err(_c, "%s(): error " _msg " %s", __func__, \
+ ##__VA_ARGS__, bch2_err_str(_ret)); \
+} while (0)
#define bch_verbose(c, fmt, ...) \
do { \
ret = bch2_inode_unpack(k, inode);
err:
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(trans->c, ret, "fetching inode %llu", inode_nr);
+ bch_err_msg(trans->c, ret, "fetching inode %llu", inode_nr);
bch2_trans_iter_exit(trans, &iter);
return ret;
}
if (!ret)
*snapshot = iter.pos.snapshot;
err:
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(trans->c, ret, "fetching inode %llu:%u", inode_nr, *snapshot);
+ bch_err_msg(trans->c, ret, "fetching inode %llu:%u", inode_nr, *snapshot);
bch2_trans_iter_exit(trans, &iter);
return ret;
}
BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE);
bch2_trans_iter_exit(trans, &iter);
err:
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
goto create_lostfound;
}
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
if (ret)
return ret;
lostfound, &lostfound_str,
0, 0, S_IFDIR|0700, 0, NULL, NULL,
(subvol_inum) { }, 0);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(c, ret, "creating lost+found");
+ bch_err_msg(c, ret, "creating lost+found");
return ret;
}
BTREE_INSERT_LAZY_RW|
BTREE_INSERT_NOFAIL,
__reattach_inode(trans, inode, inode_snapshot));
- if (ret) {
- bch_err_msg(trans->c, ret, "reattaching inode %llu", inode->bi_inum);
- return ret;
- }
-
+ bch_err_msg(trans->c, ret, "reattaching inode %llu", inode->bi_inum);
return ret;
}
(printbuf_reset(&buf),
bch2_bkey_val_to_text(&buf, c, hash_k), buf.buf))) {
ret = hash_redo_key(trans, desc, hash_info, k_iter, hash_k);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
if (ret)
return ret;
ret = -BCH_ERR_transaction_restart_nested;
u.bi_flags &= ~BCH_INODE_I_SIZE_DIRTY|BCH_INODE_UNLINKED;
ret = __write_inode(trans, &u, iter->pos.snapshot);
- if (ret) {
- if (!bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(c, ret, "in fsck updating inode");
+ bch_err_msg(c, ret, "in fsck updating inode");
+ if (ret)
return ret;
- }
if (!bpos_eq(new_min_pos, POS_MIN))
bch2_btree_iter_set_pos(iter, bpos_predecessor(new_min_pos));
bch2_fs_lazy_rw(c);
ret = bch2_inode_rm_snapshot(trans, u.bi_inum, iter->pos.snapshot);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(c, ret, "in fsck deleting inode");
+ bch_err_msg(c, ret, "in fsck deleting inode");
return ret;
}
iter->pos.snapshot),
POS(u.bi_inum, U64_MAX),
0, NULL);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(c, ret, "in fsck truncating inode");
+ bch_err_msg(c, ret, "in fsck truncating inode");
if (ret)
return ret;
sectors = bch2_count_inode_sectors(trans, u.bi_inum, iter->pos.snapshot);
if (sectors < 0) {
- bch_err_msg(c, sectors, "fsck recounting inode sectors");
+ bch_err_msg(c, sectors, "in fsck recounting inode sectors");
return sectors;
}
if (do_update) {
ret = __write_inode(trans, &u, iter->pos.snapshot);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(c, ret, "in fsck updating inode");
+ bch_err_msg(c, ret, "in fsck updating inode");
if (ret)
return ret;
}
err:
fsck_err:
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
snapshots_seen_exit(&s);
bch2_trans_put(trans);
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
}
}
fsck_err:
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret ?: trans_was_restarted(trans, restart_count);
}
err:
fsck_err:
printbuf_exit(&buf);
-
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
delete:
ret = bch2_btree_delete_at(trans, iter, BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE);
snapshots_seen_exit(&s);
bch2_trans_put(trans);
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
}
}
fsck_err:
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret ?: trans_was_restarted(trans, restart_count);
}
err:
fsck_err:
printbuf_exit(&buf);
-
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
err:
fsck_err:
printbuf_exit(&buf);
-
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
snapshots_seen_exit(&s);
inode_walker_exit(&dir);
inode_walker_exit(&target);
-
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
ret = hash_check_key(trans, bch2_xattr_hash_desc, hash_info, iter, k);
fsck_err:
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
NULL, NULL,
BTREE_INSERT_LAZY_RW|BTREE_INSERT_NOFAIL,
check_xattr(trans, &iter, k, &hash_info, &inode)));
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
BTREE_INSERT_LAZY_RW,
bch2_btree_insert_trans(trans, BTREE_ID_subvolumes,
&root_subvol.k_i, 0));
- if (ret) {
- bch_err_msg(c, ret, "writing root subvol");
+ bch_err_msg(c, ret, "writing root subvol");
+ if (ret)
goto err;
- }
}
root_inode.bi_inum = inum;
ret = __write_inode(trans, &root_inode, snapshot);
- if (ret)
- bch_err_msg(c, ret, "writing root inode");
+ bch_err_msg(c, ret, "writing root inode");
}
err:
fsck_err:
BTREE_INSERT_NOFAIL|
BTREE_INSERT_LAZY_RW,
check_root_trans(trans));
-
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
}
}
fsck_err:
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
bch2_trans_iter_exit(trans, &iter);
bch2_trans_put(trans);
darray_exit(&path);
-
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
} while (next_iter_range_start != U64_MAX);
kvfree(links.d);
-
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
BTREE_ITER_ALL_SNAPSHOTS, k,
NULL, NULL, BTREE_INSERT_NOFAIL|BTREE_INSERT_LAZY_RW,
fix_reflink_p_key(trans, &iter, k)));
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
subvol_inum inum, unsigned flags)
{
int ret = bch2_inode_peek_nowarn(trans, iter, inode, inum, flags);
-
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(trans->c, ret, "looking up inum %u:%llu:", inum.subvol, inum.inum);
+ bch_err_msg(trans->c, ret, "looking up inum %u:%llu:", inum.subvol, inum.inum);
return ret;
}
if (!bch2_snapshot_is_ancestor(c, id, k.k->p.snapshot) ||
!bch2_snapshot_is_leaf(c, id))
continue;
+again:
+ ret = btree_trans_too_many_iters(trans) ?:
+ bch2_propagate_key_to_snapshot_leaf(trans, btree, k, id, new_min_pos) ?:
+ bch2_trans_commit(trans, NULL, NULL, 0);
+ if (ret && bch2_err_matches(ret, BCH_ERR_transaction_restart)) {
+ bch2_trans_begin(trans);
+ goto again;
+ }
- ret = commit_do(trans, NULL, NULL, 0,
- bch2_propagate_key_to_snapshot_leaf(trans, btree, k, id, new_min_pos));
if (ret)
break;
}
ret = commit_do(trans, NULL, NULL, 0,
bch2_btree_iter_traverse(&iter) ?:
bch2_trans_update(trans, &iter, &k.k_i, 0));
- if (ret) {
- bch_err_msg(c, ret, "update error");
+ bch_err_msg(c, ret, "update error");
+ if (ret)
goto err;
- }
pr_info("deleting once");
ret = commit_do(trans, NULL, NULL, 0,
bch2_btree_iter_traverse(&iter) ?:
bch2_btree_delete_at(trans, &iter, 0));
- if (ret) {
- bch_err_msg(c, ret, "delete error (first)");
+ bch_err_msg(c, ret, "delete error (first)");
+ if (ret)
goto err;
- }
pr_info("deleting twice");
ret = commit_do(trans, NULL, NULL, 0,
bch2_btree_iter_traverse(&iter) ?:
bch2_btree_delete_at(trans, &iter, 0));
- if (ret) {
- bch_err_msg(c, ret, "delete error (second)");
+ bch_err_msg(c, ret, "delete error (second)");
+ if (ret)
goto err;
- }
err:
bch2_trans_iter_exit(trans, &iter);
bch2_trans_put(trans);
ret = commit_do(trans, NULL, NULL, 0,
bch2_btree_iter_traverse(&iter) ?:
bch2_trans_update(trans, &iter, &k.k_i, 0));
- if (ret) {
- bch_err_msg(c, ret, "update error");
+ bch_err_msg(c, ret, "update error");
+ if (ret)
goto err;
- }
bch2_trans_unlock(trans);
bch2_journal_flush_all_pins(&c->journal);
ret = commit_do(trans, NULL, NULL, 0,
bch2_btree_iter_traverse(&iter) ?:
bch2_btree_delete_at(trans, &iter, 0));
- if (ret) {
- bch_err_msg(c, ret, "delete error");
+ bch_err_msg(c, ret, "delete error");
+ if (ret)
goto err;
- }
err:
bch2_trans_iter_exit(trans, &iter);
bch2_trans_put(trans);
ck.k.p.snapshot = U32_MAX;
ret = bch2_btree_insert(c, BTREE_ID_xattrs, &ck.k_i, NULL, 0);
- if (ret) {
- bch_err_msg(c, ret, "insert error");
+ bch_err_msg(c, ret, "insert error");
+ if (ret)
goto err;
- }
}
pr_info("iterating forwards");
BUG_ON(k.k->p.offset != i++);
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating forwards");
+ bch_err_msg(c, ret, "error iterating forwards");
+ if (ret)
goto err;
- }
BUG_ON(i != nr);
BUG_ON(k.k->p.offset != --i);
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating backwards");
+ bch_err_msg(c, ret, "error iterating backwards");
+ if (ret)
goto err;
- }
BUG_ON(i);
err:
ck.k.size = 8;
ret = bch2_btree_insert(c, BTREE_ID_extents, &ck.k_i, NULL, 0);
- if (ret) {
- bch_err_msg(c, ret, "insert error");
+ bch_err_msg(c, ret, "insert error");
+ if (ret)
goto err;
- }
}
pr_info("iterating forwards");
i = k.k->p.offset;
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating forwards");
+ bch_err_msg(c, ret, "error iterating forwards");
+ if (ret)
goto err;
- }
BUG_ON(i != nr);
i = bkey_start_offset(k.k);
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating backwards");
+ bch_err_msg(c, ret, "error iterating backwards");
+ if (ret)
goto err;
- }
BUG_ON(i);
err:
ck.k.p.snapshot = U32_MAX;
ret = bch2_btree_insert(c, BTREE_ID_xattrs, &ck.k_i, NULL, 0);
- if (ret) {
- bch_err_msg(c, ret, "insert error");
+ bch_err_msg(c, ret, "insert error");
+ if (ret)
goto err;
- }
}
pr_info("iterating forwards");
i += 2;
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating forwards");
+ bch_err_msg(c, ret, "error iterating forwards");
+ if (ret)
goto err;
- }
BUG_ON(i != nr * 2);
ck.k.size = 8;
ret = bch2_btree_insert(c, BTREE_ID_extents, &ck.k_i, NULL, 0);
- if (ret) {
- bch_err_msg(c, ret, "insert error");
+ bch_err_msg(c, ret, "insert error");
+ if (ret)
goto err;
- }
}
pr_info("iterating forwards");
i += 16;
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating forwards");
+ bch_err_msg(c, ret, "error iterating forwards");
+ if (ret)
goto err;
- }
BUG_ON(i != nr);
i = k.k->p.offset;
0;
}));
- if (ret) {
- bch_err_msg(c, ret, "error iterating forwards by slots");
+ bch_err_msg(c, ret, "error iterating forwards by slots");
+ if (ret)
goto err;
- }
ret = 0;
err:
bch2_trans_put(trans);
k.k_i.k.version.lo = test_version++;
ret = bch2_btree_insert(c, BTREE_ID_extents, &k.k_i, NULL, 0);
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
ret = bch2_trans_do(c, NULL, NULL, 0,
bch2_btree_insert_nonextent(trans, BTREE_ID_extents, &k.k_i,
BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE));
- if (ret)
- bch_err_fn(c, ret);
+ bch_err_fn(c, ret);
return ret;
}
swap(snapids[0], snapids[1]);
ret = test_snapshot_filter(c, snapids[0], snapids[1]);
- if (ret) {
- bch_err_msg(c, ret, "from test_snapshot_filter");
- return ret;
- }
-
- return 0;
+ bch_err_msg(c, ret, "from test_snapshot_filter");
+ return ret;
}
/* perf tests */
k = bch2_btree_iter_peek(iter);
ret = bkey_err(k);
- if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
- bch_err_msg(trans->c, ret, "lookup error");
+ bch_err_msg(trans->c, ret, "lookup error");
if (ret)
return ret;