diff options
author | George Amanakis <[email protected]> | 2022-02-03 23:28:19 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2022-02-03 14:28:19 -0800 |
commit | f3b08dfd7f32ccb466e0a55a446948d6c07e497a (patch) | |
tree | 09f81c2ccd5e28b8728e123260c6f372a6c1a974 /cmd | |
parent | 142a5010ab65b8622619bb831c906cbc21b82b41 (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')
-rw-r--r-- | cmd/zstream/zstream_dump.c | 8 |
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) { |