| #!/bin/sh |
| # Copyright (C) 2014-2015 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 |
| |
| # test activation race for raid's --syncaction check |
| |
| SKIP_WITH_LVMLOCKD=1 |
| SKIP_WITH_LVMPOLLD=1 |
| |
| . lib/inittest |
| |
| # Proper mismatch count 1.5.2+ upstream, 1.3.5 < x < 1.4.0 in RHEL6 |
| aux have_raid 1 3 5 && |
| ! aux have_raid 1 4 0 || |
| aux have_raid 1 5 2 || skip |
| aux prepare_vg 3 |
| |
| lvcreate -n $lv1 $vg -l1 --type raid1 |
| |
| aux wait_for_sync $vg $lv1 |
| |
| START=$(get pv_field "$dev2" pe_start --units 1k) |
| METASIZE=$(get lv_field $vg/${lv1}_rmeta_1 size -a --units 1k) |
| SEEK=$((${START%\.00k} + ${METASIZE%\.00k})) |
| # Overwrite some portion of _rimage_1 |
| |
| #aux delay_dev "$dev2" 10 10 |
| dd if=/dev/urandom of="$dev2" bs=1K count=1 seek=$SEEK oflag=direct |
| # FIXME |
| # Some delay - there is currently race in upstream kernel |
| # test may occasionaly fail with: |
| # device-mapper: message ioctl on failed: Device or resource busy |
| # |
| # Heinz's kernel seems to fix this particular issue but |
| # has some other problem for now |
| aux udev_wait |
| |
| lvchange --syncaction check $vg/$lv1 |
| |
| # Wait till scrubbing is finished |
| aux wait_for_sync $vg $lv1 |
| |
| check lv_field $vg/$lv1 raid_mismatch_count "128" |
| |
| # Let's deactivate |
| lvchange -an $vg/$lv1 |
| |
| lvchange -ay $vg/$lv1 |
| # noone has it open and target is read & running |
| dmsetup info -c | grep $vg |
| |
| #sleep 10 < "$DM_DEV_DIR/$vg/$lv1" & |
| # "check" should find discrepancies but not change them |
| # 'lvs' should show results |
| |
| # FIXME |
| # this looks like some race with 'write' during activation |
| # and syncaction... |
| # For now it fails with: |
| # device-mapper: message ioctl on failed: Device or resource busy |
| # |
| # As solution for now - user needs to run --synaction on synchronous raid array |
| # |
| aux wait_for_sync $vg $lv1 |
| |
| # Check raid array doesn't know about error yet |
| check lv_field $vg/$lv1 raid_mismatch_count "0" |
| |
| # Start scrubbing |
| lvchange --syncaction check $vg/$lv1 |
| |
| # Wait till scrubbing is finished |
| aux wait_for_sync $vg $lv1 |
| |
| # Retest mistmatch exists |
| check lv_field $vg/$lv1 raid_mismatch_count "128" |
| |
| vgremove -ff $vg |