]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fixes in persistent L2ARC
authorGeorge Amanakis <gamanakis@gmail.com>
Mon, 26 Jul 2021 19:30:24 +0000 (21:30 +0200)
committerTony Hutter <hutter2@llnl.gov>
Tue, 14 Sep 2021 20:07:44 +0000 (13:07 -0700)
commit406534f807b9dc9055b283c86edb0549579fa2c8
treedcb95c304a7dd80efaef75fd3c9e00661ff3dd01
parentac573e31053ff4052fb74a0891ba6deae44f497c
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
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_005_pos.ksh
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_006_pos.ksh [deleted file]
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_007_pos.ksh [deleted file]
tests/zfs-tests/tests/functional/l2arc/persist_l2arc_008_pos.ksh [deleted file]