summaryrefslogtreecommitdiffstats
path: root/module/zfs/arc.c
diff options
context:
space:
mode:
authorAndriy Gapon <[email protected]>2017-02-28 23:32:55 +0200
committerBrian Behlendorf <[email protected]>2017-07-28 14:09:49 -0700
commitf06f53fa3f566056fd3a03737032f1bd6bcf48bc (patch)
tree281d1bc5e398c255157c3dafa541d1712ba619ee /module/zfs/arc.c
parente98b6117252acb4931bbcc0ff6b164269273de4e (diff)
OpenZFS 7915 - checks in l2arc_evict could use some cleaning up
Authored by: Andriy Gapon <[email protected]> Reviewed by: Dan Kimmel <[email protected]> Reviewed by: Prakash Surya <[email protected]> Approved by: Matthew Ahrens <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Ported-by: Giuseppe Di Natale <[email protected]> OpenZFS-issue: https://www.illumos.org/issues/7915 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/836a00c Closes #6375
Diffstat (limited to 'module/zfs/arc.c')
-rw-r--r--module/zfs/arc.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index a26e1156c..9f1dccaf4 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -7242,18 +7242,16 @@ top:
goto top;
}
- if (HDR_L2_WRITE_HEAD(hdr)) {
- /*
- * We hit a write head node. Leave it for
- * l2arc_write_done().
- */
- list_remove(buflist, hdr);
- mutex_exit(hash_lock);
- continue;
- }
+ /*
+ * A header can't be on this list if it doesn't have L2 header.
+ */
+ ASSERT(HDR_HAS_L2HDR(hdr));
- if (!all && HDR_HAS_L2HDR(hdr) &&
- (hdr->b_l2hdr.b_daddr > taddr ||
+ /* Ensure this header has finished being written. */
+ ASSERT(!HDR_L2_WRITING(hdr));
+ ASSERT(!HDR_L2_WRITE_HEAD(hdr));
+
+ if (!all && (hdr->b_l2hdr.b_daddr >= taddr ||
hdr->b_l2hdr.b_daddr < dev->l2ad_hand)) {
/*
* We've evicted to the target address,
@@ -7263,7 +7261,6 @@ top:
break;
}
- ASSERT(HDR_HAS_L2HDR(hdr));
if (!HDR_HAS_L1HDR(hdr)) {
ASSERT(!HDR_L2_READING(hdr));
/*
@@ -7286,9 +7283,6 @@ top:
arc_hdr_set_flags(hdr, ARC_FLAG_L2_EVICTED);
}
- /* Ensure this header has finished being written */
- ASSERT(!HDR_L2_WRITING(hdr));
-
arc_hdr_l2hdr_destroy(hdr);
}
mutex_exit(hash_lock);