Project

General

Profile

Bug #7915

checks in l2arc_evict could use some cleaning up

Added by Andriy Gapon over 2 years ago. Updated about 2 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
zfs - Zettabyte File System
Start date:
2017-02-28
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage

Description

l2arc_evict() is strictly serialized with respect to l2arc_write_buffers() and l2arc_write_done().
Normally, l2arc_evict() and l2arc_write_buffers() are called from the same thread, so they can not be concurrent.
Also, l2arc_write_buffers() uses zio_wait() on the parent zio of all cache zio-s.
That ensures that l2arc_write_done() is completed before l2arc_write_buffers() returns.

Finally, if a cache device is removed, then l2arc_evict() is called under SCL_ALL in the exclusive mode.
That ensures that it can not be concurrent with the normal L2ARC accesses to the device (including writing and evicting buffers).

Given the above, some checks and actions in l2arc_evict() do not make sense.
For instance, it must never encounter the write head header let alone remove it from the buffer list.

History

#2

Updated by Electric Monk about 2 years ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100

git commit 267ae6c3a88d2fc39276af66caafa978b0935b82

commit  267ae6c3a88d2fc39276af66caafa978b0935b82
Author: Andriy Gapon <avg@FreeBSD.org>
Date:   2017-07-18T19:24:25.000Z

    7915 checks in l2arc_evict could use some cleaning up
    Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
    Reviewed by: Prakash Surya <prakash.surya@delphix.com>
    Approved by: Matthew Ahrens <mahrens@delphix.com>

Also available in: Atom PDF