diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c index 837bacf9..3282a2c5 100644 --- a/check/mode-lowmem.c +++ b/check/mode-lowmem.c @@ -2554,6 +2554,7 @@ static int repair_inode_gen_lowmem(struct btrfs_root *root, ii = btrfs_item_ptr(path->nodes[0], path->slots[0], struct btrfs_inode_item); btrfs_set_inode_generation(path->nodes[0], ii, trans->transid); + btrfs_set_inode_transid(path->nodes[0], ii, trans->transid); btrfs_mark_buffer_dirty(path->nodes[0]); ret = btrfs_commit_transaction(trans, root); if (ret < 0) { @@ -2561,7 +2562,7 @@ static int repair_inode_gen_lowmem(struct btrfs_root *root, error("failed to commit transaction: %m"); goto error; } - printf("resetting inode generation to %llu for ino %llu\n", + printf("resetting inode generation/transid to %llu for ino %llu\n", transid, key.objectid); return ret; @@ -2597,6 +2598,7 @@ static int check_inode_item(struct btrfs_root *root, struct btrfs_path *path) u64 extent_end = 0; u64 extent_size = 0; u64 generation; + u64 transid; u64 gen_uplimit; unsigned int dir; unsigned int nodatasum; @@ -2629,6 +2631,7 @@ static int check_inode_item(struct btrfs_root *root, struct btrfs_path *path) dir = imode_to_type(mode) == BTRFS_FT_DIR; nlink = btrfs_inode_nlink(node, ii); generation = btrfs_inode_generation(node, ii); + transid = btrfs_inode_transid(node, ii); nodatasum = btrfs_inode_flags(node, ii) & BTRFS_INODE_NODATASUM; if (!is_valid_imode(mode)) { @@ -2648,10 +2651,10 @@ static int check_inode_item(struct btrfs_root *root, struct btrfs_path *path) else gen_uplimit = btrfs_super_generation(super); - if (generation > gen_uplimit) { + if (generation > gen_uplimit || transid > gen_uplimit) { error( - "invalid inode generation for ino %llu, have %llu expect [0, %llu)", - inode_id, generation, gen_uplimit); +"invalid inode generation %llu or transid %llu for ino %llu, expect [0, %llu)", + generation, transid, inode_id, gen_uplimit); if (repair) { ret = repair_inode_gen_lowmem(root, path); if (ret < 0)