/
githubmirror
/
lvm2
Обзор
Документация
Войти
/
githubmirror
/
lvm2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
test/shell/cache-metadata2.sh
125 строк
4 KB
Zdenek Kabelac
test: add kernel_cache_mode test for cleaner policy
11 фев 2026, 02:39
11 фев 2026, 02:39
57c8c9d
Код
Авторство
О чём код?
#!/usr/bin/env bash # Copyright (C) 2017 Red Hat, Inc. All rights reserved. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions # of the GNU General Public License v.2. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # Exercise usage of metadata2 cache metadata format # Until new version of cache_check tools - no integrity validation LVM_TEST_CACHE_CHECK_CMD="" . lib/inittest --skip-with-lvmpolld META2= aux have_cache 1 10 0 || { META2=not aux have_cache 1 3 0 || skip } aux prepare_vg 5 80 lvcreate -L2 -n $lv1 $vg lvcreate --type cache-pool -L1 $vg/cpool1 # no parameter - no format is stored check lv_field $vg/cpool1 cachemetadataformat "" lvcreate --type cache-pool -L1 --config 'allocation/cache_metadata_format=1' $vg/cpool # format is in configuration - would be applied during actual caching # so not stored in this moment check lv_field $vg/cpool cachemetadataformat "" lvcreate --type cache-pool -L1 --cachemetadataformat 1 $vg/cpool2 # format was specified on cmdline - preserve it metadata check lv_field $vg/cpool2 cachemetadataformat "1" lvconvert --yes -H --cachepool $vg/cpool --config 'allocation/cache_metadata_format=1' $vg/$lv1 check lv_field $vg/cpool2 cachemetadataformat "1" lvs -a -o+cachemetadataformat $vg lvremove -f $vg lvcreate --type cache-pool --cachepolicy cleaner --cachemetadataformat 1 -L1 $vg/cpool lvcreate -H -L10 -n $lv1 --cachepool $vg/cpool check lv_field $vg/$lv1 cachemetadataformat "1" lvremove -f $vg if [ -z "$META2" ]; then # for these test we need kernel with metadata2 support lvcreate --type cache-pool -L1 $vg/cpool lvcreate -H -L10 -n $lv1 --cachepool $vg/cpool check lv_field $vg/$lv1 cachemetadataformat "2" lvremove -f $vg lvcreate -L10 -n $lv1 $vg lvcreate --type cache-pool -L1 $vg/cpool lvconvert -y -H --cachepool $vg/cpool $vg/$lv1 check lv_field $vg/$lv1 cachemetadataformat "2" lvremove -f $vg lvcreate -L10 -n $lv1 $vg lvcreate --type cache-pool -L1 $vg/cpool lvconvert --cachemetadataformat 1 -y -H --cachepool $vg/cpool $vg/$lv1 check lv_field $vg/$lv1 cachemetadataformat "1" lvremove -f $vg lvcreate -L10 -n $lv1 $vg lvcreate --type cache-pool -L1 $vg/cpool lvconvert --config 'allocation/cache_metadata_format=1' -y -H --cachepool $vg/cpool $vg/$lv1 check lv_field $vg/$lv1 cachemetadataformat "1" lvremove -f $vg lvcreate --type cache-pool --cachepolicy cleaner -L1 $vg/cpool lvcreate -H -L10 -n $lv1 --cachepool $vg/cpool check lv_field $vg/$lv1 cachemetadataformat "2" lvremove -f $vg lvcreate --type cache-pool --cachepolicy mq --cachemetadataformat 1 -L1 $vg/cpool check lv_field $vg/cpool cachemetadataformat "1" lvcreate -H -L10 -n $lv1 --cachemetadataformat 2 --cachepool $vg/cpool check lv_field $vg/$lv1 cachemetadataformat "2" lvremove -f $vg # Test kernel_cache_mode vs cachemode after cleaner policy switch. # # The cleaner policy must enforce writethrough in the kernel to prevent # new dirty blocks while flushing - otherwise the cache would never drain. # However LVM metadata preserves the original mode (e.g. writeback) so it # can be restored when cleaner finishes. # # The LVM cache segment handler (_cache_add_target_line) handles this by # emitting DM_CACHE_FEATURE_WRITETHROUGH when seg->cleaner_policy is set, # before calling the libdm API. The libdm function # _dm_tree_node_add_cache_target_impl() also has enforcement code for # cleaner+writeback/passthrough, but it is never reached because the # segment handler already passes writethrough feature_flags. # # kernel_cache_mode reads the actual mode from dm status feature_flags, # while cachemode reads the mode from LVM metadata - they can differ. lvcreate --type cache-pool --cachemode writeback -L1 $vg/cpool lvcreate -H -L10 -n $lv1 --cachepool $vg/cpool check lv_field $vg/$lv1 cachemetadataformat "2" check lv_field $vg/$lv1 kernelmetadataformat "2" lvchange --cachepolicy cleaner $vg/$lv1 check lv_field $vg/$lv1 kernelmetadataformat "2" check lv_field $vg/$lv1 kernel_cache_mode "writethrough" check lv_field $vg/$lv1 cachemode "writeback" lvremove -f $vg fi #lvs -a -o name,cachemetadataformat,kernelmetadataformat,chunksize,cachepolicy,cachemode $vg vgremove -f $vg