Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bcachefs: for_each_btree_key() now declares loop iter

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>

+159 -358
+9 -27
fs/bcachefs/alloc_background.c
··· 534 534 int bch2_bucket_gens_init(struct bch_fs *c) 535 535 { 536 536 struct btree_trans *trans = bch2_trans_get(c); 537 - struct btree_iter iter; 538 - struct bkey_s_c k; 539 - struct bch_alloc_v4 a; 540 537 struct bkey_i_bucket_gens g; 541 538 bool have_bucket_gens_key = false; 542 - unsigned offset; 543 - struct bpos pos; 544 - u8 gen; 545 539 int ret; 546 540 547 541 ret = for_each_btree_key(trans, iter, BTREE_ID_alloc, POS_MIN, ··· 547 553 if (!bch2_dev_bucket_exists(c, k.k->p)) 548 554 continue; 549 555 550 - gen = bch2_alloc_to_v4(k, &a)->gen; 551 - pos = alloc_gens_pos(iter.pos, &offset); 556 + struct bch_alloc_v4 a; 557 + u8 gen = bch2_alloc_to_v4(k, &a)->gen; 558 + unsigned offset; 559 + struct bpos pos = alloc_gens_pos(iter.pos, &offset); 552 560 553 561 if (have_bucket_gens_key && bkey_cmp(iter.pos, pos)) { 554 562 ret = commit_do(trans, NULL, NULL, ··· 585 589 int bch2_alloc_read(struct bch_fs *c) 586 590 { 587 591 struct btree_trans *trans = bch2_trans_get(c); 588 - struct btree_iter iter; 589 - struct bkey_s_c k; 590 - struct bch_dev *ca; 591 592 int ret; 592 593 593 594 down_read(&c->gc_lock); 594 595 595 596 if (c->sb.version_upgrade_complete >= bcachefs_metadata_version_bucket_gens) { 596 - const struct bch_bucket_gens *g; 597 - u64 b; 598 - 599 597 ret = for_each_btree_key(trans, iter, BTREE_ID_bucket_gens, POS_MIN, 600 598 BTREE_ITER_PREFETCH, k, ({ 601 599 u64 start = bucket_gens_pos_to_alloc(k.k->p, 0).offset; ··· 598 608 if (k.k->type != KEY_TYPE_bucket_gens) 599 609 continue; 600 610 601 - g = bkey_s_c_to_bucket_gens(k).v; 611 + const struct bch_bucket_gens *g = bkey_s_c_to_bucket_gens(k).v; 602 612 603 613 /* 604 614 * Not a fsck error because this is checked/repaired by ··· 607 617 if (!bch2_dev_exists2(c, k.k->p.inode)) 608 618 continue; 609 619 610 - ca = bch_dev_bkey_exists(c, k.k->p.inode); 620 + struct bch_dev *ca = bch_dev_bkey_exists(c, k.k->p.inode); 611 621 612 - for (b = max_t(u64, ca->mi.first_bucket, start); 622 + for (u64 b = max_t(u64, ca->mi.first_bucket, start); 613 623 b < min_t(u64, ca->mi.nbuckets, end); 614 624 b++) 615 625 *bucket_gen(ca, b) = g->gens[b & KEY_TYPE_BUCKET_GENS_MASK]; 616 626 0; 617 627 })); 618 628 } else { 619 - struct bch_alloc_v4 a; 620 - 621 629 ret = for_each_btree_key(trans, iter, BTREE_ID_alloc, POS_MIN, 622 630 BTREE_ITER_PREFETCH, k, ({ 623 631 /* ··· 625 637 if (!bch2_dev_bucket_exists(c, k.k->p)) 626 638 continue; 627 639 628 - ca = bch_dev_bkey_exists(c, k.k->p.inode); 640 + struct bch_dev *ca = bch_dev_bkey_exists(c, k.k->p.inode); 629 641 642 + struct bch_alloc_v4 a; 630 643 *bucket_gen(ca, k.k->p.offset) = bch2_alloc_to_v4(k, &a)->gen; 631 644 0; 632 645 })); ··· 1538 1549 1539 1550 int bch2_check_alloc_to_lru_refs(struct bch_fs *c) 1540 1551 { 1541 - struct btree_iter iter; 1542 - struct bkey_s_c k; 1543 - 1544 1552 int ret = bch2_trans_run(c, 1545 1553 for_each_btree_key_commit(trans, iter, BTREE_ID_alloc, 1546 1554 POS_MIN, BTREE_ITER_PREFETCH, k, ··· 1666 1680 static void bch2_do_discards_work(struct work_struct *work) 1667 1681 { 1668 1682 struct bch_fs *c = container_of(work, struct bch_fs, discard_work); 1669 - struct btree_iter iter; 1670 - struct bkey_s_c k; 1671 1683 u64 seen = 0, open = 0, need_journal_commit = 0, discarded = 0; 1672 1684 struct bpos discard_pos_done = POS_MAX; 1673 1685 int ret; ··· 1789 1805 struct bch_fs *c = container_of(work, struct bch_fs, invalidate_work); 1790 1806 struct bch_dev *ca; 1791 1807 struct btree_trans *trans = bch2_trans_get(c); 1792 - struct btree_iter iter; 1793 - struct bkey_s_c k; 1794 1808 unsigned i; 1795 1809 int ret = 0; 1796 1810
-5
fs/bcachefs/backpointers.c
··· 391 391 /* verify that every backpointer has a corresponding alloc key */ 392 392 int bch2_check_btree_backpointers(struct bch_fs *c) 393 393 { 394 - struct btree_iter iter; 395 - struct bkey_s_c k; 396 - 397 394 int ret = bch2_trans_run(c, 398 395 for_each_btree_key_commit(trans, iter, 399 396 BTREE_ID_backpointers, POS_MIN, 0, k, ··· 818 821 struct bbpos start, 819 822 struct bbpos end) 820 823 { 821 - struct btree_iter iter; 822 - struct bkey_s_c k; 823 824 struct bpos last_flushed_pos = SPOS_MAX; 824 825 825 826 return for_each_btree_key_commit(trans, iter, BTREE_ID_backpointers,
+15 -42
fs/bcachefs/btree_gc.c
··· 1479 1479 static int bch2_gc_alloc_done(struct bch_fs *c, bool metadata_only) 1480 1480 { 1481 1481 struct btree_trans *trans = bch2_trans_get(c); 1482 - struct btree_iter iter; 1483 - struct bkey_s_c k; 1484 1482 struct bch_dev *ca; 1485 1483 unsigned i; 1486 1484 int ret = 0; ··· 1505 1507 { 1506 1508 struct bch_dev *ca; 1507 1509 struct btree_trans *trans = bch2_trans_get(c); 1508 - struct btree_iter iter; 1509 - struct bkey_s_c k; 1510 1510 struct bucket *g; 1511 1511 struct bch_alloc_v4 a_convert; 1512 1512 const struct bch_alloc_v4 *a; ··· 1628 1632 1629 1633 static int bch2_gc_reflink_done(struct bch_fs *c, bool metadata_only) 1630 1634 { 1631 - struct btree_trans *trans; 1632 - struct btree_iter iter; 1633 - struct bkey_s_c k; 1634 1635 size_t idx = 0; 1635 - int ret = 0; 1636 1636 1637 1637 if (metadata_only) 1638 1638 return 0; 1639 1639 1640 - trans = bch2_trans_get(c); 1641 - 1642 - ret = for_each_btree_key_commit(trans, iter, 1643 - BTREE_ID_reflink, POS_MIN, 1644 - BTREE_ITER_PREFETCH, k, 1645 - NULL, NULL, BCH_TRANS_COMMIT_no_enospc, 1646 - bch2_gc_write_reflink_key(trans, &iter, k, &idx)); 1647 - 1640 + int ret = bch2_trans_run(c, 1641 + for_each_btree_key_commit(trans, iter, 1642 + BTREE_ID_reflink, POS_MIN, 1643 + BTREE_ITER_PREFETCH, k, 1644 + NULL, NULL, BCH_TRANS_COMMIT_no_enospc, 1645 + bch2_gc_write_reflink_key(trans, &iter, k, &idx))); 1648 1646 c->reflink_gc_nr = 0; 1649 - bch2_trans_put(trans); 1650 - bch_err_fn(c, ret); 1651 1647 return ret; 1652 1648 } 1653 1649 1654 1650 static int bch2_gc_reflink_start(struct bch_fs *c, 1655 1651 bool metadata_only) 1656 1652 { 1657 - struct btree_iter iter; 1658 - struct bkey_s_c k; 1659 - struct reflink_gc *r; 1660 - int ret = 0; 1661 1653 1662 1654 if (metadata_only) 1663 1655 return 0; 1664 1656 1665 1657 c->reflink_gc_nr = 0; 1666 1658 1667 - ret = bch2_trans_run(c, 1659 + int ret = bch2_trans_run(c, 1668 1660 for_each_btree_key(trans, iter, BTREE_ID_reflink, POS_MIN, 1669 1661 BTREE_ITER_PREFETCH, k, ({ 1670 1662 const __le64 *refcount = bkey_refcount_c(k); ··· 1660 1676 if (!refcount) 1661 1677 continue; 1662 1678 1663 - r = genradix_ptr_alloc(&c->reflink_gc_table, c->reflink_gc_nr++, 1664 - GFP_KERNEL); 1679 + struct reflink_gc *r = genradix_ptr_alloc(&c->reflink_gc_table, 1680 + c->reflink_gc_nr++, GFP_KERNEL); 1665 1681 if (!r) { 1666 1682 ret = -BCH_ERR_ENOMEM_gc_reflink_start; 1667 1683 break; ··· 1741 1757 1742 1758 static int bch2_gc_stripes_done(struct bch_fs *c, bool metadata_only) 1743 1759 { 1744 - struct btree_trans *trans; 1745 - struct btree_iter iter; 1746 - struct bkey_s_c k; 1747 - int ret = 0; 1748 - 1749 1760 if (metadata_only) 1750 1761 return 0; 1751 1762 1752 - trans = bch2_trans_get(c); 1753 - 1754 - ret = for_each_btree_key_commit(trans, iter, 1755 - BTREE_ID_stripes, POS_MIN, 1756 - BTREE_ITER_PREFETCH, k, 1757 - NULL, NULL, BCH_TRANS_COMMIT_no_enospc, 1758 - bch2_gc_write_stripes_key(trans, &iter, k)); 1759 - 1760 - bch2_trans_put(trans); 1761 - return ret; 1763 + return bch2_trans_run(c, 1764 + for_each_btree_key_commit(trans, iter, 1765 + BTREE_ID_stripes, POS_MIN, 1766 + BTREE_ITER_PREFETCH, k, 1767 + NULL, NULL, BCH_TRANS_COMMIT_no_enospc, 1768 + bch2_gc_write_stripes_key(trans, &iter, k))); 1762 1769 } 1763 1770 1764 1771 static void bch2_gc_stripes_reset(struct bch_fs *c, bool metadata_only) ··· 1933 1958 int bch2_gc_gens(struct bch_fs *c) 1934 1959 { 1935 1960 struct btree_trans *trans; 1936 - struct btree_iter iter; 1937 - struct bkey_s_c k; 1938 1961 struct bch_dev *ca; 1939 1962 u64 b, start_time = local_clock(); 1940 1963 unsigned i;
+4
fs/bcachefs/btree_iter.h
··· 704 704 #define for_each_btree_key_upto(_trans, _iter, _btree_id, \ 705 705 _start, _end, _flags, _k, _do) \ 706 706 ({ \ 707 + struct btree_iter _iter; \ 708 + struct bkey_s_c _k; \ 707 709 int _ret3 = 0; \ 708 710 \ 709 711 bch2_trans_iter_init((_trans), &(_iter), (_btree_id), \ ··· 734 732 #define for_each_btree_key_reverse(_trans, _iter, _btree_id, \ 735 733 _start, _flags, _k, _do) \ 736 734 ({ \ 735 + struct btree_iter _iter; \ 736 + struct bkey_s_c _k; \ 737 737 int _ret3 = 0; \ 738 738 \ 739 739 bch2_trans_iter_init((_trans), &(_iter), (_btree_id), \
+30 -57
fs/bcachefs/debug.c
··· 366 366 size_t size, loff_t *ppos) 367 367 { 368 368 struct dump_iter *i = file->private_data; 369 - struct btree_trans *trans; 370 - struct btree_iter iter; 371 - struct bkey_s_c k; 372 - ssize_t ret; 373 369 374 370 i->ubuf = buf; 375 371 i->size = size; 376 372 i->ret = 0; 377 373 378 - ret = flush_buf(i); 379 - if (ret) 380 - return ret; 381 - 382 - trans = bch2_trans_get(i->c); 383 - ret = for_each_btree_key(trans, iter, i->id, i->from, 384 - BTREE_ITER_PREFETCH| 385 - BTREE_ITER_ALL_SNAPSHOTS, k, ({ 386 - bch2_bkey_val_to_text(&i->buf, i->c, k); 387 - prt_newline(&i->buf); 388 - bch2_trans_unlock(trans); 389 - flush_buf(i); 390 - })); 391 - i->from = iter.pos; 392 - 393 - bch2_trans_put(trans); 394 - 395 - if (!ret) 396 - ret = flush_buf(i); 397 - 398 - return ret ?: i->ret; 374 + return flush_buf(i) ?: 375 + bch2_trans_run(i->c, 376 + for_each_btree_key(trans, iter, i->id, i->from, 377 + BTREE_ITER_PREFETCH| 378 + BTREE_ITER_ALL_SNAPSHOTS, k, ({ 379 + bch2_bkey_val_to_text(&i->buf, i->c, k); 380 + prt_newline(&i->buf); 381 + bch2_trans_unlock(trans); 382 + i->from = bpos_successor(iter.pos); 383 + flush_buf(i); 384 + }))) ?: 385 + i->ret; 399 386 } 400 387 401 388 static const struct file_operations btree_debug_ops = { ··· 450 463 size_t size, loff_t *ppos) 451 464 { 452 465 struct dump_iter *i = file->private_data; 453 - struct btree_trans *trans; 454 - struct btree_iter iter; 455 - struct bkey_s_c k; 456 - ssize_t ret; 457 466 458 467 i->ubuf = buf; 459 468 i->size = size; 460 469 i->ret = 0; 461 470 462 - ret = flush_buf(i); 463 - if (ret) 464 - return ret; 471 + return flush_buf(i) ?: 472 + bch2_trans_run(i->c, 473 + for_each_btree_key(trans, iter, i->id, i->from, 474 + BTREE_ITER_PREFETCH| 475 + BTREE_ITER_ALL_SNAPSHOTS, k, ({ 476 + struct btree_path_level *l = &iter.path->l[0]; 477 + struct bkey_packed *_k = 478 + bch2_btree_node_iter_peek(&l->iter, l->b); 465 479 466 - trans = bch2_trans_get(i->c); 480 + if (bpos_gt(l->b->key.k.p, i->prev_node)) { 481 + bch2_btree_node_to_text(&i->buf, i->c, l->b); 482 + i->prev_node = l->b->key.k.p; 483 + } 467 484 468 - ret = for_each_btree_key(trans, iter, i->id, i->from, 469 - BTREE_ITER_PREFETCH| 470 - BTREE_ITER_ALL_SNAPSHOTS, k, ({ 471 - struct btree_path_level *l = &iter.path->l[0]; 472 - struct bkey_packed *_k = 473 - bch2_btree_node_iter_peek(&l->iter, l->b); 474 - 475 - if (bpos_gt(l->b->key.k.p, i->prev_node)) { 476 - bch2_btree_node_to_text(&i->buf, i->c, l->b); 477 - i->prev_node = l->b->key.k.p; 478 - } 479 - 480 - bch2_bfloat_to_text(&i->buf, l->b, _k); 481 - bch2_trans_unlock(trans); 482 - flush_buf(i); 483 - })); 484 - i->from = iter.pos; 485 - 486 - bch2_trans_put(trans); 487 - 488 - if (!ret) 489 - ret = flush_buf(i); 490 - 491 - return ret ?: i->ret; 485 + bch2_bfloat_to_text(&i->buf, l->b, _k); 486 + bch2_trans_unlock(trans); 487 + i->from = bpos_successor(iter.pos); 488 + flush_buf(i); 489 + }))) ?: 490 + i->ret; 492 491 } 493 492 494 493 static const struct file_operations bfloat_failed_debug_ops = {
+4 -11
fs/bcachefs/ec.c
··· 1826 1826 1827 1827 int bch2_stripes_read(struct bch_fs *c) 1828 1828 { 1829 - struct btree_iter iter; 1830 - struct bkey_s_c k; 1831 - const struct bch_stripe *s; 1832 - struct stripe *m; 1833 - unsigned i; 1834 - int ret; 1835 - 1836 - ret = bch2_trans_run(c, 1829 + int ret = bch2_trans_run(c, 1837 1830 for_each_btree_key(trans, iter, BTREE_ID_stripes, POS_MIN, 1838 1831 BTREE_ITER_PREFETCH, k, ({ 1839 1832 if (k.k->type != KEY_TYPE_stripe) ··· 1836 1843 if (ret) 1837 1844 break; 1838 1845 1839 - s = bkey_s_c_to_stripe(k).v; 1846 + const struct bch_stripe *s = bkey_s_c_to_stripe(k).v; 1840 1847 1841 - m = genradix_ptr(&c->stripes, k.k->p.offset); 1848 + struct stripe *m = genradix_ptr(&c->stripes, k.k->p.offset); 1842 1849 m->sectors = le16_to_cpu(s->sectors); 1843 1850 m->algorithm = s->algorithm; 1844 1851 m->nr_blocks = s->nr_blocks; 1845 1852 m->nr_redundant = s->nr_redundant; 1846 1853 m->blocks_nonempty = 0; 1847 1854 1848 - for (i = 0; i < s->nr_blocks; i++) 1855 + for (unsigned i = 0; i < s->nr_blocks; i++) 1849 1856 m->blocks_nonempty += !!stripe_blockcount_get(s, i); 1850 1857 1851 1858 bch2_stripes_heap_insert(c, m, k.k->p.offset);
+5 -34
fs/bcachefs/fsck.c
··· 27 27 static s64 bch2_count_inode_sectors(struct btree_trans *trans, u64 inum, 28 28 u32 snapshot) 29 29 { 30 - struct btree_iter iter; 31 - struct bkey_s_c k; 32 30 u64 sectors = 0; 33 31 34 32 int ret = for_each_btree_key_upto(trans, iter, BTREE_ID_extents, ··· 44 46 static s64 bch2_count_subdirs(struct btree_trans *trans, u64 inum, 45 47 u32 snapshot) 46 48 { 47 - struct btree_iter iter; 48 - struct bkey_s_c k; 49 49 u64 subdirs = 0; 50 50 51 51 int ret = for_each_btree_key_upto(trans, iter, BTREE_ID_dirents, ··· 974 978 { 975 979 bool full = c->opts.fsck; 976 980 struct btree_trans *trans = bch2_trans_get(c); 977 - struct btree_iter iter; 978 981 struct bch_inode_unpacked prev = { 0 }; 979 982 struct snapshots_seen s; 980 - struct bkey_s_c k; 981 983 int ret; 982 984 983 985 snapshots_seen_init(&s); ··· 1418 1424 struct inode_walker w = inode_walker_init(); 1419 1425 struct snapshots_seen s; 1420 1426 struct btree_trans *trans = bch2_trans_get(c); 1421 - struct btree_iter iter; 1422 - struct bkey_s_c k; 1423 1427 struct extent_ends extent_ends; 1424 1428 struct disk_reservation res = { 0 }; 1425 1429 int ret = 0; ··· 1449 1457 int bch2_check_indirect_extents(struct bch_fs *c) 1450 1458 { 1451 1459 struct btree_trans *trans = bch2_trans_get(c); 1452 - struct btree_iter iter; 1453 - struct bkey_s_c k; 1454 1460 struct disk_reservation res = { 0 }; 1455 1461 int ret = 0; 1456 1462 ··· 1817 1827 struct snapshots_seen s; 1818 1828 struct bch_hash_info hash_info; 1819 1829 struct btree_trans *trans = bch2_trans_get(c); 1820 - struct btree_iter iter; 1821 - struct bkey_s_c k; 1822 1830 int ret = 0; 1823 1831 1824 1832 snapshots_seen_init(&s); ··· 1880 1892 { 1881 1893 struct inode_walker inode = inode_walker_init(); 1882 1894 struct bch_hash_info hash_info; 1883 - struct btree_iter iter; 1884 - struct bkey_s_c k; 1885 1895 int ret = 0; 1886 1896 1887 1897 ret = bch2_trans_run(c, ··· 2206 2220 struct nlink_table *t, 2207 2221 u64 start, u64 *end) 2208 2222 { 2209 - struct btree_iter iter; 2210 - struct bkey_s_c k; 2211 - struct bch_inode_unpacked u; 2212 - 2213 2223 int ret = bch2_trans_run(c, 2214 2224 for_each_btree_key(trans, iter, BTREE_ID_inodes, 2215 2225 POS(0, start), ··· 2216 2234 continue; 2217 2235 2218 2236 /* Should never fail, checked by bch2_inode_invalid: */ 2237 + struct bch_inode_unpacked u; 2219 2238 BUG_ON(bch2_inode_unpack(k, &u)); 2220 2239 2221 2240 /* ··· 2247 2264 u64 range_start, u64 range_end) 2248 2265 { 2249 2266 struct snapshots_seen s; 2250 - struct btree_iter iter; 2251 - struct bkey_s_c k; 2252 - struct bkey_s_c_dirent d; 2253 2267 2254 2268 snapshots_seen_init(&s); 2255 2269 ··· 2259 2279 if (ret) 2260 2280 break; 2261 2281 2262 - switch (k.k->type) { 2263 - case KEY_TYPE_dirent: 2264 - d = bkey_s_c_to_dirent(k); 2282 + if (k.k->type == KEY_TYPE_dirent) { 2283 + struct bkey_s_c_dirent d = bkey_s_c_to_dirent(k); 2265 2284 2266 2285 if (d.v->d_type != DT_DIR && 2267 2286 d.v->d_type != DT_SUBVOL) 2268 2287 inc_link(c, &s, links, range_start, range_end, 2269 2288 le64_to_cpu(d.v->d_inum), 2270 2289 bch2_snapshot_equiv(c, d.k->p.snapshot)); 2271 - break; 2272 2290 } 2273 2291 0; 2274 2292 }))); ··· 2324 2346 struct nlink_table *links, 2325 2347 u64 range_start, u64 range_end) 2326 2348 { 2327 - struct btree_iter iter; 2328 - struct bkey_s_c k; 2329 2349 size_t idx = 0; 2330 - int ret = 0; 2331 2350 2332 - ret = bch2_trans_run(c, 2351 + int ret = bch2_trans_run(c, 2333 2352 for_each_btree_key_commit(trans, iter, BTREE_ID_inodes, 2334 2353 POS(0, range_start), 2335 2354 BTREE_ITER_INTENT|BTREE_ITER_PREFETCH|BTREE_ITER_ALL_SNAPSHOTS, k, ··· 2402 2427 2403 2428 int bch2_fix_reflink_p(struct bch_fs *c) 2404 2429 { 2405 - struct btree_iter iter; 2406 - struct bkey_s_c k; 2407 - int ret; 2408 - 2409 2430 if (c->sb.version >= bcachefs_metadata_version_reflink_p_fix) 2410 2431 return 0; 2411 2432 2412 - ret = bch2_trans_run(c, 2433 + int ret = bch2_trans_run(c, 2413 2434 for_each_btree_key_commit(trans, iter, 2414 2435 BTREE_ID_extents, POS_MIN, 2415 2436 BTREE_ITER_INTENT|BTREE_ITER_PREFETCH|
-3
fs/bcachefs/inode.c
··· 1155 1155 int bch2_delete_dead_inodes(struct bch_fs *c) 1156 1156 { 1157 1157 struct btree_trans *trans = bch2_trans_get(c); 1158 - struct btree_iter iter; 1159 - struct bkey_s_c k; 1160 1158 bool need_another_pass; 1161 1159 int ret; 1162 1160 again: ··· 1198 1200 } 1199 1201 err: 1200 1202 bch2_trans_put(trans); 1201 - bch_err_fn(c, ret); 1202 1203 return ret; 1203 1204 }
-2
fs/bcachefs/io_write.c
··· 1166 1166 { 1167 1167 struct bch_fs *c = op->c; 1168 1168 struct btree_trans *trans = bch2_trans_get(c); 1169 - struct btree_iter iter; 1170 1169 struct bkey_i *orig; 1171 - struct bkey_s_c k; 1172 1170 int ret; 1173 1171 1174 1172 for_each_keylist_key(&op->insert_keys, orig) {
+1 -5
fs/bcachefs/logged_ops.c
··· 54 54 55 55 int bch2_resume_logged_ops(struct bch_fs *c) 56 56 { 57 - struct btree_iter iter; 58 - struct bkey_s_c k; 59 - int ret; 60 - 61 - ret = bch2_trans_run(c, 57 + int ret = bch2_trans_run(c, 62 58 for_each_btree_key(trans, iter, 63 59 BTREE_ID_logged_ops, POS_MIN, 64 60 BTREE_ITER_PREFETCH, k,
+1 -5
fs/bcachefs/lru.c
··· 147 147 148 148 int bch2_check_lrus(struct bch_fs *c) 149 149 { 150 - struct btree_iter iter; 151 - struct bkey_s_c k; 152 150 struct bpos last_flushed_pos = POS_MIN; 153 - int ret = 0; 154 - 155 - ret = bch2_trans_run(c, 151 + int ret = bch2_trans_run(c, 156 152 for_each_btree_key_commit(trans, iter, 157 153 BTREE_ID_lru, POS_MIN, BTREE_ITER_PREFETCH, k, 158 154 NULL, NULL, BCH_TRANS_COMMIT_no_enospc|BCH_TRANS_COMMIT_lazy_rw,
-2
fs/bcachefs/migrate.c
··· 79 79 static int bch2_dev_usrdata_drop(struct bch_fs *c, unsigned dev_idx, int flags) 80 80 { 81 81 struct btree_trans *trans = bch2_trans_get(c); 82 - struct btree_iter iter; 83 - struct bkey_s_c k; 84 82 enum btree_id id; 85 83 int ret = 0; 86 84
-3
fs/bcachefs/move.c
··· 372 372 int ret = 0; 373 373 374 374 if (io_opts->cur_inum != extent_k.k->p.inode) { 375 - struct btree_iter iter; 376 - struct bkey_s_c k; 377 - 378 375 io_opts->d.nr = 0; 379 376 380 377 ret = for_each_btree_key(trans, iter, BTREE_ID_inodes, POS(0, extent_k.k->p.inode),
-2
fs/bcachefs/movinggc.c
··· 145 145 { 146 146 struct btree_trans *trans = ctxt->trans; 147 147 struct bch_fs *c = trans->c; 148 - struct btree_iter iter; 149 - struct bkey_s_c k; 150 148 size_t nr_to_get = max_t(size_t, 16U, buckets_in_flight->nr / 4); 151 149 size_t saw = 0, in_flight = 0, not_movable = 0, sectors = 0; 152 150 int ret;
+8 -17
fs/bcachefs/quota.c
··· 599 599 600 600 int bch2_fs_quota_read(struct bch_fs *c) 601 601 { 602 - struct bch_sb_field_quota *sb_quota; 603 - struct btree_trans *trans; 604 - struct btree_iter iter; 605 - struct bkey_s_c k; 606 - int ret; 607 602 608 603 mutex_lock(&c->sb_lock); 609 - sb_quota = bch2_sb_get_or_create_quota(&c->disk_sb); 604 + struct bch_sb_field_quota *sb_quota = bch2_sb_get_or_create_quota(&c->disk_sb); 610 605 if (!sb_quota) { 611 606 mutex_unlock(&c->sb_lock); 612 607 return -BCH_ERR_ENOSPC_sb_quota; ··· 610 615 bch2_sb_quota_read(c); 611 616 mutex_unlock(&c->sb_lock); 612 617 613 - trans = bch2_trans_get(c); 614 - 615 - ret = for_each_btree_key(trans, iter, BTREE_ID_quotas, POS_MIN, 616 - BTREE_ITER_PREFETCH, k, 617 - __bch2_quota_set(c, k, NULL)) ?: 618 - for_each_btree_key(trans, iter, BTREE_ID_inodes, POS_MIN, 619 - BTREE_ITER_PREFETCH|BTREE_ITER_ALL_SNAPSHOTS, k, 620 - bch2_fs_quota_read_inode(trans, &iter, k)); 621 - 622 - bch2_trans_put(trans); 623 - 618 + int ret = bch2_trans_run(c, 619 + for_each_btree_key(trans, iter, BTREE_ID_quotas, POS_MIN, 620 + BTREE_ITER_PREFETCH, k, 621 + __bch2_quota_set(c, k, NULL)) ?: 622 + for_each_btree_key(trans, iter, BTREE_ID_inodes, POS_MIN, 623 + BTREE_ITER_PREFETCH|BTREE_ITER_ALL_SNAPSHOTS, k, 624 + bch2_fs_quota_read_inode(trans, &iter, k))); 624 625 bch_err_fn(c, ret); 625 626 return ret; 626 627 }
+4 -20
fs/bcachefs/snapshot.c
··· 581 581 */ 582 582 int bch2_check_snapshot_trees(struct bch_fs *c) 583 583 { 584 - struct btree_iter iter; 585 - struct bkey_s_c k; 586 - int ret; 587 - 588 - ret = bch2_trans_run(c, 584 + int ret = bch2_trans_run(c, 589 585 for_each_btree_key_commit(trans, iter, 590 586 BTREE_ID_snapshot_trees, POS_MIN, 591 587 BTREE_ITER_PREFETCH, k, ··· 849 853 850 854 int bch2_check_snapshots(struct bch_fs *c) 851 855 { 852 - struct btree_iter iter; 853 - struct bkey_s_c k; 854 - int ret; 855 - 856 856 /* 857 857 * We iterate backwards as checking/fixing the depth field requires that 858 858 * the parent's depth already be correct: 859 859 */ 860 - ret = bch2_trans_run(c, 860 + int ret = bch2_trans_run(c, 861 861 for_each_btree_key_reverse_commit(trans, iter, 862 862 BTREE_ID_snapshots, POS_MAX, 863 863 BTREE_ITER_PREFETCH, k, ··· 1355 1363 int bch2_delete_dead_snapshots(struct bch_fs *c) 1356 1364 { 1357 1365 struct btree_trans *trans; 1358 - struct btree_iter iter; 1359 - struct bkey_s_c k; 1360 - struct bkey_s_c_snapshot snap; 1361 1366 snapshot_id_list deleted = { 0 }; 1362 1367 snapshot_id_list deleted_interior = { 0 }; 1363 1368 u32 id; ··· 1396 1407 if (k.k->type != KEY_TYPE_snapshot) 1397 1408 continue; 1398 1409 1399 - snap = bkey_s_c_to_snapshot(k); 1400 - BCH_SNAPSHOT_DELETED(snap.v) 1410 + BCH_SNAPSHOT_DELETED(bkey_s_c_to_snapshot(k).v) 1401 1411 ? snapshot_list_add(c, &deleted, k.k->p.offset) 1402 1412 : 0; 1403 1413 })); ··· 1661 1673 1662 1674 int bch2_snapshots_read(struct bch_fs *c) 1663 1675 { 1664 - struct btree_iter iter; 1665 - struct bkey_s_c k; 1666 - int ret = 0; 1667 - 1668 - ret = bch2_trans_run(c, 1676 + int ret = bch2_trans_run(c, 1669 1677 for_each_btree_key(trans, iter, BTREE_ID_snapshots, 1670 1678 POS_MIN, 0, k, 1671 1679 bch2_mark_snapshot(trans, BTREE_ID_snapshots, 0, bkey_s_c_null, k, 0) ?:
+1 -7
fs/bcachefs/subvolume.c
··· 79 79 80 80 int bch2_check_subvols(struct bch_fs *c) 81 81 { 82 - struct btree_iter iter; 83 - struct bkey_s_c k; 84 - int ret; 85 - 86 - ret = bch2_trans_run(c, 82 + int ret = bch2_trans_run(c, 87 83 for_each_btree_key_commit(trans, iter, 88 84 BTREE_ID_subvolumes, POS_MIN, BTREE_ITER_PREFETCH, k, 89 85 NULL, NULL, BCH_TRANS_COMMIT_no_enospc, ··· 220 224 */ 221 225 static int bch2_subvolumes_reparent(struct btree_trans *trans, u32 subvolid_to_delete) 222 226 { 223 - struct btree_iter iter; 224 - struct bkey_s_c k; 225 227 struct bch_subvolume s; 226 228 227 229 return lockrestart_do(trans,
-2
fs/bcachefs/sysfs.c
··· 256 256 static int bch2_compression_stats_to_text(struct printbuf *out, struct bch_fs *c) 257 257 { 258 258 struct btree_trans *trans; 259 - struct btree_iter iter; 260 - struct bkey_s_c k; 261 259 enum btree_id id; 262 260 struct compression_type_stats { 263 261 u64 nr_extents;
+77 -114
fs/bcachefs/tests.c
··· 107 107 108 108 static int test_iterate(struct bch_fs *c, u64 nr) 109 109 { 110 - struct btree_trans *trans = bch2_trans_get(c); 111 - struct btree_iter iter = { NULL }; 112 - struct bkey_s_c k; 113 110 u64 i; 114 111 int ret = 0; 115 112 ··· 124 127 ret = bch2_btree_insert(c, BTREE_ID_xattrs, &ck.k_i, NULL, 0); 125 128 bch_err_msg(c, ret, "insert error"); 126 129 if (ret) 127 - goto err; 130 + return ret; 128 131 } 129 132 130 133 pr_info("iterating forwards"); 131 - 132 134 i = 0; 133 135 134 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 135 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 136 - 0, k, ({ 137 - BUG_ON(k.k->p.offset != i++); 138 - 0; 139 - })); 136 + ret = bch2_trans_run(c, 137 + for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 138 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 139 + 0, k, ({ 140 + BUG_ON(k.k->p.offset != i++); 141 + 0; 142 + }))); 140 143 bch_err_msg(c, ret, "error iterating forwards"); 141 144 if (ret) 142 - goto err; 145 + return ret; 143 146 144 147 BUG_ON(i != nr); 145 148 146 149 pr_info("iterating backwards"); 147 150 148 - ret = for_each_btree_key_reverse(trans, iter, BTREE_ID_xattrs, 149 - SPOS(0, U64_MAX, U32_MAX), 0, k, 150 - ({ 151 + ret = bch2_trans_run(c, 152 + for_each_btree_key_reverse(trans, iter, BTREE_ID_xattrs, 153 + SPOS(0, U64_MAX, U32_MAX), 0, k, ({ 151 154 BUG_ON(k.k->p.offset != --i); 152 155 0; 153 - })); 156 + }))); 154 157 bch_err_msg(c, ret, "error iterating backwards"); 155 158 if (ret) 156 - goto err; 159 + return ret; 157 160 158 161 BUG_ON(i); 159 - err: 160 - bch2_trans_iter_exit(trans, &iter); 161 - bch2_trans_put(trans); 162 - return ret; 162 + return 0; 163 163 } 164 164 165 165 static int test_iterate_extents(struct bch_fs *c, u64 nr) 166 166 { 167 - struct btree_trans *trans = bch2_trans_get(c); 168 - struct btree_iter iter = { NULL }; 169 - struct bkey_s_c k; 170 167 u64 i; 171 168 int ret = 0; 172 169 ··· 179 188 ret = bch2_btree_insert(c, BTREE_ID_extents, &ck.k_i, NULL, 0); 180 189 bch_err_msg(c, ret, "insert error"); 181 190 if (ret) 182 - goto err; 191 + return ret; 183 192 } 184 193 185 194 pr_info("iterating forwards"); 186 - 187 195 i = 0; 188 196 189 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 190 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 191 - 0, k, ({ 192 - BUG_ON(bkey_start_offset(k.k) != i); 193 - i = k.k->p.offset; 194 - 0; 195 - })); 197 + ret = bch2_trans_run(c, 198 + for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 199 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 200 + 0, k, ({ 201 + BUG_ON(bkey_start_offset(k.k) != i); 202 + i = k.k->p.offset; 203 + 0; 204 + }))); 196 205 bch_err_msg(c, ret, "error iterating forwards"); 197 206 if (ret) 198 - goto err; 207 + return ret; 199 208 200 209 BUG_ON(i != nr); 201 210 202 211 pr_info("iterating backwards"); 203 212 204 - ret = for_each_btree_key_reverse(trans, iter, BTREE_ID_extents, 205 - SPOS(0, U64_MAX, U32_MAX), 0, k, 206 - ({ 213 + ret = bch2_trans_run(c, 214 + for_each_btree_key_reverse(trans, iter, BTREE_ID_extents, 215 + SPOS(0, U64_MAX, U32_MAX), 0, k, ({ 207 216 BUG_ON(k.k->p.offset != i); 208 217 i = bkey_start_offset(k.k); 209 218 0; 210 - })); 219 + }))); 211 220 bch_err_msg(c, ret, "error iterating backwards"); 212 221 if (ret) 213 - goto err; 222 + return ret; 214 223 215 224 BUG_ON(i); 216 - err: 217 - bch2_trans_iter_exit(trans, &iter); 218 - bch2_trans_put(trans); 219 - return ret; 225 + return 0; 220 226 } 221 227 222 228 static int test_iterate_slots(struct bch_fs *c, u64 nr) 223 229 { 224 - struct btree_trans *trans = bch2_trans_get(c); 225 - struct btree_iter iter = { NULL }; 226 - struct bkey_s_c k; 227 230 u64 i; 228 231 int ret = 0; 229 232 ··· 235 250 ret = bch2_btree_insert(c, BTREE_ID_xattrs, &ck.k_i, NULL, 0); 236 251 bch_err_msg(c, ret, "insert error"); 237 252 if (ret) 238 - goto err; 253 + return ret; 239 254 } 240 255 241 256 pr_info("iterating forwards"); 242 - 243 257 i = 0; 244 258 245 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 246 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 247 - 0, k, ({ 248 - BUG_ON(k.k->p.offset != i); 249 - i += 2; 250 - 0; 251 - })); 259 + ret = bch2_trans_run(c, 260 + for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 261 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 262 + 0, k, ({ 263 + BUG_ON(k.k->p.offset != i); 264 + i += 2; 265 + 0; 266 + }))); 252 267 bch_err_msg(c, ret, "error iterating forwards"); 253 268 if (ret) 254 - goto err; 269 + return ret; 255 270 256 271 BUG_ON(i != nr * 2); 257 272 258 273 pr_info("iterating forwards by slots"); 259 - 260 274 i = 0; 261 275 262 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 263 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 264 - BTREE_ITER_SLOTS, k, ({ 265 - if (i >= nr * 2) 266 - break; 276 + ret = bch2_trans_run(c, 277 + for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 278 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 279 + BTREE_ITER_SLOTS, k, ({ 280 + if (i >= nr * 2) 281 + break; 267 282 268 - BUG_ON(k.k->p.offset != i); 269 - BUG_ON(bkey_deleted(k.k) != (i & 1)); 283 + BUG_ON(k.k->p.offset != i); 284 + BUG_ON(bkey_deleted(k.k) != (i & 1)); 270 285 271 - i++; 272 - 0; 273 - })); 274 - if (ret < 0) { 275 - bch_err_msg(c, ret, "error iterating forwards by slots"); 276 - goto err; 277 - } 278 - ret = 0; 279 - err: 280 - bch2_trans_put(trans); 286 + i++; 287 + 0; 288 + }))); 289 + bch_err_msg(c, ret, "error iterating forwards by slots"); 281 290 return ret; 282 291 } 283 292 284 293 static int test_iterate_slots_extents(struct bch_fs *c, u64 nr) 285 294 { 286 - struct btree_trans *trans = bch2_trans_get(c); 287 - struct btree_iter iter = { NULL }; 288 - struct bkey_s_c k; 289 295 u64 i; 290 296 int ret = 0; 291 297 ··· 295 319 ret = bch2_btree_insert(c, BTREE_ID_extents, &ck.k_i, NULL, 0); 296 320 bch_err_msg(c, ret, "insert error"); 297 321 if (ret) 298 - goto err; 322 + return ret; 299 323 } 300 324 301 325 pr_info("iterating forwards"); 302 - 303 326 i = 0; 304 327 305 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 306 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 307 - 0, k, ({ 308 - BUG_ON(bkey_start_offset(k.k) != i + 8); 309 - BUG_ON(k.k->size != 8); 310 - i += 16; 311 - 0; 312 - })); 328 + ret = bch2_trans_run(c, 329 + for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 330 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 331 + 0, k, ({ 332 + BUG_ON(bkey_start_offset(k.k) != i + 8); 333 + BUG_ON(k.k->size != 8); 334 + i += 16; 335 + 0; 336 + }))); 313 337 bch_err_msg(c, ret, "error iterating forwards"); 314 338 if (ret) 315 - goto err; 339 + return ret; 316 340 317 341 BUG_ON(i != nr); 318 342 319 343 pr_info("iterating forwards by slots"); 320 - 321 344 i = 0; 322 345 323 - ret = for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 324 - SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 325 - BTREE_ITER_SLOTS, k, ({ 326 - if (i == nr) 327 - break; 328 - BUG_ON(bkey_deleted(k.k) != !(i % 16)); 346 + ret = bch2_trans_run(c, 347 + for_each_btree_key_upto(trans, iter, BTREE_ID_extents, 348 + SPOS(0, 0, U32_MAX), POS(0, U64_MAX), 349 + BTREE_ITER_SLOTS, k, ({ 350 + if (i == nr) 351 + break; 352 + BUG_ON(bkey_deleted(k.k) != !(i % 16)); 329 353 330 - BUG_ON(bkey_start_offset(k.k) != i); 331 - BUG_ON(k.k->size != 8); 332 - i = k.k->p.offset; 333 - 0; 334 - })); 354 + BUG_ON(bkey_start_offset(k.k) != i); 355 + BUG_ON(k.k->size != 8); 356 + i = k.k->p.offset; 357 + 0; 358 + }))); 335 359 bch_err_msg(c, ret, "error iterating forwards by slots"); 336 - if (ret) 337 - goto err; 338 - ret = 0; 339 - err: 340 - bch2_trans_put(trans); 341 - return 0; 360 + return ret; 342 361 } 343 362 344 363 /* ··· 707 736 708 737 static int seq_insert(struct bch_fs *c, u64 nr) 709 738 { 710 - struct btree_iter iter; 711 - struct bkey_s_c k; 712 739 struct bkey_i_cookie insert; 713 740 714 741 bkey_cookie_init(&insert.k_i); ··· 725 756 726 757 static int seq_lookup(struct bch_fs *c, u64 nr) 727 758 { 728 - struct btree_iter iter; 729 - struct bkey_s_c k; 730 - 731 759 return bch2_trans_run(c, 732 760 for_each_btree_key_upto(trans, iter, BTREE_ID_xattrs, 733 761 SPOS(0, 0, U32_MAX), POS(0, U64_MAX), ··· 734 768 735 769 static int seq_overwrite(struct bch_fs *c, u64 nr) 736 770 { 737 - struct btree_iter iter; 738 - struct bkey_s_c k; 739 - 740 771 return bch2_trans_run(c, 741 772 for_each_btree_key_commit(trans, iter, BTREE_ID_xattrs, 742 773 SPOS(0, 0, U32_MAX),