mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-27 10:24:22 +03:00
Remove wrong ASSERT in annotate_ecksum
When using large blocks like 1M, there will be more than UINT16_MAX qwords in one block, so this ASSERT would go off. Also, it is possible for the histogram to overflow. We cap them to UINT16_MAX to prevent this. Signed-off-by: Chunwei Chen <david.chen@osnexus.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #4257
This commit is contained in:
parent
eea9309423
commit
093911f194
@ -457,7 +457,8 @@ update_histogram(uint64_t value_arg, uint16_t *hist, uint32_t *count)
|
|||||||
/* We store the bits in big-endian (largest-first) order */
|
/* We store the bits in big-endian (largest-first) order */
|
||||||
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
||||||
if (value & (1ull << i)) {
|
if (value & (1ull << i)) {
|
||||||
hist[63 - i]++;
|
if (hist[63 - i] < UINT16_MAX)
|
||||||
|
hist[63 - i]++;
|
||||||
++bits;
|
++bits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -615,7 +616,6 @@ annotate_ecksum(nvlist_t *ereport, zio_bad_cksum_t *info,
|
|||||||
if (badbuf == NULL || goodbuf == NULL)
|
if (badbuf == NULL || goodbuf == NULL)
|
||||||
return (eip);
|
return (eip);
|
||||||
|
|
||||||
ASSERT3U(nui64s, <=, UINT16_MAX);
|
|
||||||
ASSERT3U(size, ==, nui64s * sizeof (uint64_t));
|
ASSERT3U(size, ==, nui64s * sizeof (uint64_t));
|
||||||
ASSERT3U(size, <=, SPA_MAXBLOCKSIZE);
|
ASSERT3U(size, <=, SPA_MAXBLOCKSIZE);
|
||||||
ASSERT3U(size, <=, UINT32_MAX);
|
ASSERT3U(size, <=, UINT32_MAX);
|
||||||
|
Loading…
Reference in New Issue
Block a user