Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZTS: Fix create-o_ashift test case #6977

Merged
merged 1 commit into from
Dec 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions cmd/zdb/zdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -2788,17 +2788,17 @@ dump_label(const char *dev)
exit(1);
}

if (ioctl(fd, BLKFLSBUF) != 0)
(void) printf("failed to invalidate cache '%s' : %s\n", path,
strerror(errno));

if (fstat64_blk(fd, &statbuf) != 0) {
(void) printf("failed to stat '%s': %s\n", path,
strerror(errno));
(void) close(fd);
exit(1);
}

if (S_ISBLK(statbuf.st_mode) && ioctl(fd, BLKFLSBUF) != 0)
(void) printf("failed to invalidate cache '%s' : %s\n", path,
strerror(errno));

avl_create(&config_tree, cksum_record_compare,
sizeof (cksum_record_t), offsetof(cksum_record_t, link));
avl_create(&uberblock_tree, cksum_record_compare,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,54 +42,47 @@

verify_runnable "global"

# See issue: https://github.com/zfsonlinux/zfs/issues/6924
if is_linux; then
log_unsupported "Test case occasionally fails"
fi

function cleanup
{
poolexists $TESTPOOL && destroy_pool $TESTPOOL
destroy_pool $TESTPOOL
log_must rm -f $disk
}

#
# Commit the specified number of TXGs to the provided pool
# We use 'zpool sync' here because we can't force it via sync(1) like on illumos
# $1 pool name
# $2 number of txg syncs
# Fill the uberblock ring in every <device> label: we do this by committing
# TXGs to the provided <pool> until every slot contains a valid uberblock.
# NOTE: We use 'zpool sync' here because we can't force it via sync(1) like on
# illumos
#
function txg_sync
function write_device_uberblocks # <device> <pool>
{
typeset pool=$1
typeset -i count=$2
typeset -i i=0;
typeset device=$1
typeset pool=$2

while [ $i -lt $count ]
while [ "$(zdb -quuul $device | grep -c 'invalid')" -ne 0 ]
do
log_must sync_pool $pool true
((i = i + 1))
sync_pool $pool true
done
}

#
# Verify device $1 labels contains $2 valid uberblocks in every label
# $1 device
# $2 uberblocks count
# Verify every label on <device> contains <count> (valid) uberblocks
#
function verify_device_uberblocks
function verify_device_uberblocks # <device> <count>
{
typeset device=$1
typeset ubcount=$2

zdb -quuul $device | egrep '^(\s+)?Uberblock' |
egrep -v 'invalid$' | awk \
-v ubcount=$ubcount '{ uberblocks[$0]++; }
END { for (i in uberblocks) {
count++;
if (uberblocks[i] != 4) { exit 1; }
}
if (count != ubcount) { exit 1; } }'
awk -v ubcount=$ubcount 'BEGIN { count=0 } { uberblocks[$0]++; }
END {
for (i in uberblocks) {
if (i ~ /invalid/) { continue; }
if (uberblocks[i] != 4) { exit 1; }
count++;
}
if (count != ubcount) { exit 1; }
}'

return $?
}
Expand All @@ -115,8 +108,7 @@ do
log_fail "Pool was created without setting ashift value to "\
"$ashift (current = $pprop)"
fi
# force 128 txg sync to fill the uberblock ring
txg_sync $TESTPOOL 128
write_device_uberblocks $disk $TESTPOOL
verify_device_uberblocks $disk ${ubcount[$i]}
if [[ $? -ne 0 ]]
then
Expand Down