]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: kill inode_walker_entry.snapshot
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 1 May 2025 19:18:40 +0000 (15:18 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 May 2025 00:14:41 +0000 (20:14 -0400)
redundant

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fsck.c

index ef2d6cbffcc28f63d8ce2342fc1e3c62fcd0e7fd..256e3907cd0435e971c1cc64eb15da81eee8d5cf 100644 (file)
@@ -787,12 +787,11 @@ static int ref_visible2(struct bch_fs *c,
 
 #define for_each_visible_inode(_c, _s, _w, _snapshot, _i)                              \
        for (_i = (_w)->inodes.data; _i < (_w)->inodes.data + (_w)->inodes.nr &&        \
-            (_i)->snapshot <= (_snapshot); _i++)                                       \
-               if (key_visible_in_snapshot(_c, _s, _i->snapshot, _snapshot))
+            (_i)->inode.bi_snapshot <= (_snapshot); _i++)                              \
+               if (key_visible_in_snapshot(_c, _s, _i->inode.bi_snapshot, _snapshot))
 
 struct inode_walker_entry {
        struct bch_inode_unpacked inode;
-       u32                     snapshot;
        u64                     count;
        u64                     i_size;
 };
@@ -826,7 +825,6 @@ static int add_inode(struct bch_fs *c, struct inode_walker *w,
        return bch2_inode_unpack(inode, &u) ?:
                darray_push(&w->inodes, ((struct inode_walker_entry) {
                .inode          = u,
-               .snapshot       = inode.k->p.snapshot,
        }));
 }
 
@@ -872,19 +870,19 @@ lookup_inode_for_snapshot(struct bch_fs *c, struct inode_walker *w, struct bkey_
 
        struct inode_walker_entry *i;
        __darray_for_each(w->inodes, i)
-               if (bch2_snapshot_is_ancestor(c, k.k->p.snapshot, i->snapshot))
+               if (bch2_snapshot_is_ancestor(c, k.k->p.snapshot, i->inode.bi_snapshot))
                        goto found;
 
        return NULL;
 found:
-       BUG_ON(k.k->p.snapshot > i->snapshot);
+       BUG_ON(k.k->p.snapshot > i->inode.bi_snapshot);
 
-       if (k.k->p.snapshot != i->snapshot && !is_whiteout) {
+       if (k.k->p.snapshot != i->inode.bi_snapshot && !is_whiteout) {
                struct inode_walker_entry new = *i;
 
-               new.snapshot    = k.k->p.snapshot;
-               new.count       = 0;
-               new.i_size      = 0;
+               new.inode.bi_snapshot   = k.k->p.snapshot;
+               new.count               = 0;
+               new.i_size              = 0;
 
                struct printbuf buf = PRINTBUF;
                bch2_bkey_val_to_text(&buf, c, k);
@@ -892,10 +890,10 @@ found:
                bch_info(c, "have key for inode %llu:%u but have inode in ancestor snapshot %u\n"
                         "unexpected because we should always update the inode when we update a key in that inode\n"
                         "%s",
-                        w->last_pos.inode, k.k->p.snapshot, i->snapshot, buf.buf);
+                        w->last_pos.inode, k.k->p.snapshot, i->inode.bi_snapshot, buf.buf);
                printbuf_exit(&buf);
 
-               while (i > w->inodes.data && i[-1].snapshot > k.k->p.snapshot)
+               while (i > w->inodes.data && i[-1].inode.bi_snapshot > k.k->p.snapshot)
                        --i;
 
                size_t pos = i - w->inodes.data;
@@ -1498,21 +1496,21 @@ static int check_i_sectors_notnested(struct btree_trans *trans, struct inode_wal
                if (i->inode.bi_sectors == i->count)
                        continue;
 
-               count2 = bch2_count_inode_sectors(trans, w->last_pos.inode, i->snapshot);
+               count2 = bch2_count_inode_sectors(trans, w->last_pos.inode, i->inode.bi_snapshot);
 
                if (w->recalculate_sums)
                        i->count = count2;
 
                if (i->count != count2) {
                        bch_err_ratelimited(c, "fsck counted i_sectors wrong for inode %llu:%u: got %llu should be %llu",
-                                           w->last_pos.inode, i->snapshot, i->count, count2);
+                                           w->last_pos.inode, i->inode.bi_snapshot, i->count, count2);
                        i->count = count2;
                }
 
                if (fsck_err_on(!(i->inode.bi_flags & BCH_INODE_i_sectors_dirty),
                                trans, inode_i_sectors_wrong,
                                "inode %llu:%u has incorrect i_sectors: got %llu, should be %llu",
-                               w->last_pos.inode, i->snapshot,
+                               w->last_pos.inode, i->inode.bi_snapshot,
                                i->inode.bi_sectors, i->count)) {
                        i->inode.bi_sectors = i->count;
                        ret = bch2_fsck_write_inode(trans, &i->inode);
@@ -1823,20 +1821,20 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
                for (struct inode_walker_entry *i = extent_i ?: &darray_last(inode->inodes);
                     inode->inodes.data && i >= inode->inodes.data;
                     --i) {
-                       if (i->snapshot > k.k->p.snapshot ||
-                           !key_visible_in_snapshot(c, s, i->snapshot, k.k->p.snapshot))
+                       if (i->inode.bi_snapshot > k.k->p.snapshot ||
+                           !key_visible_in_snapshot(c, s, i->inode.bi_snapshot, k.k->p.snapshot))
                                continue;
 
                        if (fsck_err_on(k.k->p.offset > round_up(i->inode.bi_size, block_bytes(c)) >> 9 &&
                                        !bkey_extent_is_reservation(k),
                                        trans, extent_past_end_of_inode,
                                        "extent type past end of inode %llu:%u, i_size %llu\n%s",
-                                       i->inode.bi_inum, i->snapshot, i->inode.bi_size,
+                                       i->inode.bi_inum, i->inode.bi_snapshot, i->inode.bi_size,
                                        (bch2_bkey_val_to_text(&buf, c, k), buf.buf))) {
                                struct btree_iter iter2;
 
                                bch2_trans_copy_iter(trans, &iter2, iter);
-                               bch2_btree_iter_set_snapshot(trans, &iter2, i->snapshot);
+                               bch2_btree_iter_set_snapshot(trans, &iter2, i->inode.bi_snapshot);
                                ret =   bch2_btree_iter_traverse(trans, &iter2) ?:
                                        bch2_btree_delete_at(trans, &iter2,
                                                BTREE_UPDATE_internal_snapshot_node);
@@ -1858,8 +1856,8 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
                for (struct inode_walker_entry *i = extent_i ?: &darray_last(inode->inodes);
                     inode->inodes.data && i >= inode->inodes.data;
                     --i) {
-                       if (i->snapshot > k.k->p.snapshot ||
-                           !key_visible_in_snapshot(c, s, i->snapshot, k.k->p.snapshot))
+                       if (i->inode.bi_snapshot > k.k->p.snapshot ||
+                           !key_visible_in_snapshot(c, s, i->inode.bi_snapshot, k.k->p.snapshot))
                                continue;
 
                        i->count += k.k->size;
@@ -1941,13 +1939,13 @@ static int check_subdir_count_notnested(struct btree_trans *trans, struct inode_
                if (i->inode.bi_nlink == i->count)
                        continue;
 
-               count2 = bch2_count_subdirs(trans, w->last_pos.inode, i->snapshot);
+               count2 = bch2_count_subdirs(trans, w->last_pos.inode, i->inode.bi_snapshot);
                if (count2 < 0)
                        return count2;
 
                if (i->count != count2) {
                        bch_err_ratelimited(c, "fsck counted subdirectories wrong for inum %llu:%u: got %llu should be %llu",
-                                           w->last_pos.inode, i->snapshot, i->count, count2);
+                                           w->last_pos.inode, i->inode.bi_snapshot, i->count, count2);
                        i->count = count2;
                        if (i->inode.bi_nlink == i->count)
                                continue;
@@ -1956,7 +1954,7 @@ static int check_subdir_count_notnested(struct btree_trans *trans, struct inode_
                if (fsck_err_on(i->inode.bi_nlink != i->count,
                                trans, inode_dir_wrong_nlink,
                                "directory %llu:%u with wrong i_nlink: got %u, should be %llu",
-                               w->last_pos.inode, i->snapshot, i->inode.bi_nlink, i->count)) {
+                               w->last_pos.inode, i->inode.bi_snapshot, i->inode.bi_nlink, i->count)) {
                        i->inode.bi_nlink = i->count;
                        ret = bch2_fsck_write_inode(trans, &i->inode);
                        if (ret)