OpenZFS 8731 - ASSERT3U(nui64s, <=, UINT16_MAX) fails for large blocks
Authored by: Andriy Gapon <avg@FreeBSD.org> Approved by: Dan McDonald <danmcd@joyent.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Chunwei Chen <tuxoko@gmail.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Ported-by: Giuseppe Di Natale <dinatale2@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/8731 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/4c08500788 Closes #7079
This commit is contained in:
parent
cf232b53d5
commit
1b18c6d791
|
@ -451,8 +451,8 @@ zfs_ereport_start(nvlist_t **ereport_out, nvlist_t **detector_out,
|
||||||
|
|
||||||
typedef struct zfs_ecksum_info {
|
typedef struct zfs_ecksum_info {
|
||||||
/* histograms of set and cleared bits by bit number in a 64-bit word */
|
/* histograms of set and cleared bits by bit number in a 64-bit word */
|
||||||
uint16_t zei_histogram_set[sizeof (uint64_t) * NBBY];
|
uint32_t zei_histogram_set[sizeof (uint64_t) * NBBY];
|
||||||
uint16_t zei_histogram_cleared[sizeof (uint64_t) * NBBY];
|
uint32_t zei_histogram_cleared[sizeof (uint64_t) * NBBY];
|
||||||
|
|
||||||
/* inline arrays of bits set and cleared. */
|
/* inline arrays of bits set and cleared. */
|
||||||
uint64_t zei_bits_set[ZFM_MAX_INLINE];
|
uint64_t zei_bits_set[ZFM_MAX_INLINE];
|
||||||
|
@ -477,7 +477,7 @@ typedef struct zfs_ecksum_info {
|
||||||
} zfs_ecksum_info_t;
|
} zfs_ecksum_info_t;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_histogram(uint64_t value_arg, uint16_t *hist, uint32_t *count)
|
update_histogram(uint64_t value_arg, uint32_t *hist, uint32_t *count)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
size_t bits = 0;
|
size_t bits = 0;
|
||||||
|
@ -643,7 +643,7 @@ annotate_ecksum(nvlist_t *ereport, zio_bad_cksum_t *info,
|
||||||
if (badabd == NULL || goodabd == NULL)
|
if (badabd == NULL || goodabd == NULL)
|
||||||
return (eip);
|
return (eip);
|
||||||
|
|
||||||
ASSERT3U(nui64s, <=, UINT16_MAX);
|
ASSERT3U(nui64s, <=, UINT32_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);
|
||||||
|
@ -754,10 +754,10 @@ annotate_ecksum(nvlist_t *ereport, zio_bad_cksum_t *info,
|
||||||
} else {
|
} else {
|
||||||
fm_payload_set(ereport,
|
fm_payload_set(ereport,
|
||||||
FM_EREPORT_PAYLOAD_ZFS_BAD_SET_HISTOGRAM,
|
FM_EREPORT_PAYLOAD_ZFS_BAD_SET_HISTOGRAM,
|
||||||
DATA_TYPE_UINT16_ARRAY,
|
DATA_TYPE_UINT32_ARRAY,
|
||||||
NBBY * sizeof (uint64_t), eip->zei_histogram_set,
|
NBBY * sizeof (uint64_t), eip->zei_histogram_set,
|
||||||
FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_HISTOGRAM,
|
FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_HISTOGRAM,
|
||||||
DATA_TYPE_UINT16_ARRAY,
|
DATA_TYPE_UINT32_ARRAY,
|
||||||
NBBY * sizeof (uint64_t), eip->zei_histogram_cleared,
|
NBBY * sizeof (uint64_t), eip->zei_histogram_cleared,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue