diff options
author | Brian Behlendorf <[email protected]> | 2014-01-31 16:35:53 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2014-02-05 12:24:53 -0800 |
commit | c5cb66addcb947ae8843c40c6db134ccd821adb7 (patch) | |
tree | e97afc012564a6ccf525c0e834905cdd0c8ab60b | |
parent | 2e7b7657cdb9ad02c0e0fcf6c8b2bb1c58d1273a (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.c | 2 |
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; }; |