Skip to content

Commit

Permalink
Fix corrupted l2_asize in arcstats
Browse files Browse the repository at this point in the history
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 <git@dehacked.net>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes openzfs#1990
  • Loading branch information
behlendorf committed Feb 5, 2014
1 parent 2e7b765 commit c5cb66a
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion module/zfs/arc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down

0 comments on commit c5cb66a

Please sign in to comment.