summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2014-01-31 16:35:53 -0800
committerBrian Behlendorf <[email protected]>2014-02-05 12:24:53 -0800
commitc5cb66addcb947ae8843c40c6db134ccd821adb7 (patch)
treee97afc012564a6ccf525c0e834905cdd0c8ab60b
parent2e7b7657cdb9ad02c0e0fcf6c8b2bb1c58d1273a (diff)
Fix corrupted l2_asize in arcstats
Commit e0b0ca9 accidentally corrupted the l2_asize displayed in arcstats. This was caused by changing the l2arc_buf_hdr.b_asize member from an int to uint32_t type. There are places in the code where this field is cast to a uint64_t resulting in the b_hits member being treated as part of b_asize. To resolve the issue the type has been changed to a uint64_t, and the b_hits member is placed after the enum to prevent the size of the structure from increasing. This is a good example of exactly why it's a bad idea to use ambiguous types (int) in these structures. Signed-off-by: DHE <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #1990
-rw-r--r--module/zfs/arc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 2459c9326..cbe0a6028 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -743,8 +743,8 @@ struct l2arc_buf_hdr {
/* compression applied to buffer data */
enum zio_compress b_compress;
/* real alloc'd buffer size depending on b_compress applied */
- uint32_t b_asize;
uint32_t b_hits;
+ uint64_t b_asize;
/* temporary buffer holder for in-flight compressed data */
void *b_tmp_cdata;
};