mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-04 15:48:51 -05:00
bcachefs: kill inode_walker_entry.snapshot
redundant Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -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 @@ lookup_inode_for_snapshot(struct bch_fs *c, struct inode_walker *w, struct bkey_
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user