Fixes in persistent L2ARC
commitab8a8f07457831a21db888afcf48910ce3e9214a
authorGeorge Amanakis <gamanakis@gmail.com>
Mon, 26 Jul 2021 19:30:24 +0000 (26 21:30 +0200)
committerGitHub <noreply@github.com>
Mon, 26 Jul 2021 19:30:24 +0000 (26 12:30 -0700)
tree2067358071a5cb6839a86e07776496130155f04f
parent037af3e0d403e3850c5d4b0bc4854911013a6a15
Fixes in persistent L2ARC

In l2arc_add_vdev() first decide whether the device is eligible for
L2ARC rebuild or whole device trim and then add it to the list of cache
devices. Otherwise l2arc_feed_thread() might already start writing on
the device invalidating previous content as l2ad_hand = l2ad_start.
However l2arc_rebuild_vdev() needs the device present in the cache
device list to figure out its l2arc_dev_t. Fix this by moving most of
l2arc_rebuild_vdev() in a new function l2arc_rebuild_dev() which does
not need to search in the cache device list.

In contrast to l2arc_add_vdev() we do not have to worry about
l2arc_feed_thread() invalidating previous content when onlining a
cache device. The device parameters (l2ad*) are not cleared when
offlining the device and writing new buffers will not invalidate
all previous content. In worst case only buffers that have not had
their log block written to the device will be lost.

Retire persist_l2arc_00{4,5,8} tests since they cover code already
covered by the remaining ones. Test persist_l2arc_006 is renamed to
persist_l2arc_004 and persist_l2arc_007 is renamed to persist_l2arc_005.

Fix a typo in persist_l2arc_004, and remove an assertion that is not
always true from l2arc_arcstats_pos. Also update an assertion in
persist_l2arc_005 and explain why in a comment.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: George Amanakis <gamanakis@gmail.com>
Closes #12365
module/zfs/arc.c
tests/runfiles/common.run
tests/test-runner/bin/zts-report.py.in
tests/zfs-tests/tests/functional/l2arc/Makefile.am
tests/zfs-tests/tests/functional/l2arc/l2arc_arcstats_pos.ksh
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_004_pos.ksh [moved from tests/zfs-tests/tests/functional/l2arc/persist_l2arc_006_pos.ksh with 98% similarity]
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_005_pos.ksh [moved from tests/zfs-tests/tests/functional/l2arc/persist_l2arc_007_pos.ksh with 86% similarity]
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_008_pos.ksh [deleted file]