diff options
author | Arne Jansen <[email protected]> | 2015-09-11 09:18:56 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-09-11 11:14:38 -0700 |
commit | 4e0f33ffe018b07021f627328f0a207550d1b374 (patch) | |
tree | b4b6b7a142ae2bd29ead4a99b6e292911a097cf3 /include | |
parent | 9965059ab9991a5fc7df9a489021e73880b3bcc0 (diff) |
Illumos 6214 - zpools going south
6214 zpools going south
Reviewed by: Igor Kozhukhov <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Dan McDonald <[email protected]>
Reviewed by: Saso Kiselkov <[email protected]>
References:
https://www.illumos.org/issues/6214
http://cr.illumos.org/~webrev/sensille/6214_zpools_going_south/
Porting Notes:
Reintroduce b_compress to the l2arc_buf_hdr_t. In commit b9541d6
the compression flags were moved to the generic b_flags in the
arc_buf_hdr_t. This is a problem because l2arc_compress_buf()
may manipulate the compression flags and this can only be done
safely under the hash lock which is not held. See Illumos 6214
for a detailed analysis of the race.
HDR_GET_COMPRESS() macro was removed from arc_buf_info().
Ported-by: Brian Behlendorf <[email protected]>
Closes #3757
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/arc.h | 14 | ||||
-rw-r--r-- | include/sys/arc_impl.h | 1 |
2 files changed, 1 insertions, 14 deletions
diff --git a/include/sys/arc.h b/include/sys/arc.h index f88fe0298..db7a64aa2 100644 --- a/include/sys/arc.h +++ b/include/sys/arc.h @@ -105,20 +105,6 @@ typedef enum arc_flags /* Flags specifying whether optional hdr struct fields are defined */ ARC_FLAG_HAS_L1HDR = 1 << 17, ARC_FLAG_HAS_L2HDR = 1 << 18, - - /* - * The arc buffer's compression mode is stored in the top 7 bits of the - * flags field, so these dummy flags are included so that MDB can - * interpret the enum properly. - */ - ARC_FLAG_COMPRESS_0 = 1 << 24, - ARC_FLAG_COMPRESS_1 = 1 << 25, - ARC_FLAG_COMPRESS_2 = 1 << 26, - ARC_FLAG_COMPRESS_3 = 1 << 27, - ARC_FLAG_COMPRESS_4 = 1 << 28, - ARC_FLAG_COMPRESS_5 = 1 << 29, - ARC_FLAG_COMPRESS_6 = 1 << 30 - } arc_flags_t; struct arc_buf { diff --git a/include/sys/arc_impl.h b/include/sys/arc_impl.h index 5f9f49252..a9dbfc8dd 100644 --- a/include/sys/arc_impl.h +++ b/include/sys/arc_impl.h @@ -187,6 +187,7 @@ typedef struct l2arc_buf_hdr { /* real alloc'd buffer size depending on b_compress applied */ uint32_t b_hits; int32_t b_asize; + uint8_t b_compress; list_node_t b_l2node; } l2arc_buf_hdr_t; |