aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/zstream
diff options
context:
space:
mode:
authorGeorge Amanakis <[email protected]>2022-02-03 23:28:19 +0100
committerGitHub <[email protected]>2022-02-03 14:28:19 -0800
commitf3b08dfd7f32ccb466e0a55a446948d6c07e497a (patch)
tree09f81c2ccd5e28b8728e123260c6f372a6c1a974 /cmd/zstream
parent142a5010ab65b8622619bb831c906cbc21b82b41 (diff)
Report dnodes with faulty bonuslen
In files created/modified before 4254acb there may be a corruption of xattrs which is not reported during scrub and normal send/receive. It manifests only as an error when raw sending/receiving. This happens because currently only the raw receive path checks for discrepancies between the dnode bonus length and the spill pointer flag. In case we encounter a dnode whose bonus length is greater than the predicted one, we should report an error. Modify in this regard dnode_sync() with an assertion at the end, dump_dnode() to error out, dsl_scan_recurse() to report errors during a scrub, and zstream to report a warning when dumping. Also added a test to verify spill blocks are sent correctly in a raw send. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: George Amanakis <[email protected]> Closes #12720 Closes #13014
Diffstat (limited to 'cmd/zstream')
-rw-r--r--cmd/zstream/zstream_dump.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/cmd/zstream/zstream_dump.c b/cmd/zstream/zstream_dump.c
index 45cf7b97a..af69a1494 100644
--- a/cmd/zstream/zstream_dump.c
+++ b/cmd/zstream/zstream_dump.c
@@ -461,6 +461,14 @@ zstream_do_dump(int argc, char *argv[])
BSWAP_64(drro->drr_maxblkid);
}
+ if (drro->drr_bonuslen > drro->drr_raw_bonuslen) {
+ (void) fprintf(stderr,
+ "Warning: Object %llu has bonuslen = "
+ "%u > raw_bonuslen = %u\n\n",
+ (u_longlong_t)drro->drr_object,
+ drro->drr_bonuslen, drro->drr_raw_bonuslen);
+ }
+
payload_size = DRR_OBJECT_PAYLOAD_SIZE(drro);
if (verbose) {