Add link count test for root inode
Add tests for 97aa3ba44("Fix link count of root inode when snapdir is visible") as suggested in #8727. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@osnexus.com> Closes #8732
This commit is contained in:
parent
a1eaf0dde0
commit
94866d8309
|
@ -635,7 +635,7 @@ tests = ['filesystem_count', 'filesystem_limit', 'snapshot_count',
|
||||||
tags = ['functional', 'limits']
|
tags = ['functional', 'limits']
|
||||||
|
|
||||||
[tests/functional/link_count]
|
[tests/functional/link_count]
|
||||||
tests = ['link_count_001']
|
tests = ['link_count_001', 'link_count_root_inode.ksh']
|
||||||
tags = ['functional', 'link_count']
|
tags = ['functional', 'link_count']
|
||||||
|
|
||||||
[tests/functional/migration]
|
[tests/functional/migration]
|
||||||
|
|
|
@ -2,4 +2,5 @@ pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/link_count
|
||||||
dist_pkgdata_SCRIPTS = \
|
dist_pkgdata_SCRIPTS = \
|
||||||
cleanup.ksh \
|
cleanup.ksh \
|
||||||
setup.ksh \
|
setup.ksh \
|
||||||
link_count_001.ksh
|
link_count_001.ksh \
|
||||||
|
link_count_root_inode.ksh
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
#!/bin/ksh
|
||||||
|
|
||||||
|
#
|
||||||
|
# This file and its contents are supplied under the terms of the
|
||||||
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
||||||
|
# You may only use this file in accordance with the terms of version
|
||||||
|
# 1.0 of the CDDL.
|
||||||
|
#
|
||||||
|
# A full copy of the text of the CDDL should have accompanied this
|
||||||
|
# source. A copy of the CDDL is also available via the Internet at
|
||||||
|
# http://www.illumos.org/license/CDDL.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by Tomohiro Kusumi. All rights reserved.
|
||||||
|
#
|
||||||
|
|
||||||
|
. $STF_SUITE/include/libtest.shlib
|
||||||
|
|
||||||
|
#
|
||||||
|
# DESCRIPTION:
|
||||||
|
# Verify root inode (directory) has correct link count.
|
||||||
|
#
|
||||||
|
# STRATEGY:
|
||||||
|
# 1. Create pool and fs.
|
||||||
|
# 2. Test link count of root inode.
|
||||||
|
# 3. Create directories and test link count of root inode.
|
||||||
|
# 4. Delete directories and test link count of root inode.
|
||||||
|
# 5. Create regular file and test link count of root inode.
|
||||||
|
# 6. Delete regular file and test link count of root inode.
|
||||||
|
#
|
||||||
|
|
||||||
|
function assert_link_count
|
||||||
|
{
|
||||||
|
typeset dirpath="$1"
|
||||||
|
typeset value="$2"
|
||||||
|
|
||||||
|
log_must test "$(ls -ld $dirpath | awk '{ print $2 }')" == "$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
verify_runnable "both"
|
||||||
|
|
||||||
|
log_note "Verify root inode (directory) has correct link count."
|
||||||
|
|
||||||
|
# Delete a directory from link_count_001.ksh.
|
||||||
|
if [ -d "${TESTDIR}" -a -d "${TESTDIR}/tmp" ]; then
|
||||||
|
log_must rm -rf ${TESTDIR}/tmp
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test with hidden '.zfs' directory.
|
||||||
|
# This also tests general directories.
|
||||||
|
#
|
||||||
|
log_note "Testing with snapdir set to hidden (default)"
|
||||||
|
|
||||||
|
for dst in $TESTPOOL $TESTPOOL/$TESTFS
|
||||||
|
do
|
||||||
|
typeset mtpt=$(get_prop mountpoint $dst)
|
||||||
|
log_must zfs set snapdir=hidden $dst
|
||||||
|
log_must test -d "$mtpt/.zfs"
|
||||||
|
if test -n "$(ls $mtpt)"; then
|
||||||
|
ls $mtpt
|
||||||
|
log_note "$mtpt not empty, skipping"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
assert_link_count $mtpt 2
|
||||||
|
|
||||||
|
log_must mkdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
log_must rmdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 2
|
||||||
|
|
||||||
|
log_must mkdir -p $mtpt/a/b
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
log_must rmdir $mtpt/a/b
|
||||||
|
log_must rmdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 2
|
||||||
|
|
||||||
|
log_must touch $mtpt/a
|
||||||
|
assert_link_count $mtpt 2
|
||||||
|
log_must rm $mtpt/a
|
||||||
|
assert_link_count $mtpt 2
|
||||||
|
done
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test with visible '.zfs' directory.
|
||||||
|
#
|
||||||
|
log_note "Testing with snapdir set to visible"
|
||||||
|
|
||||||
|
for dst in $TESTPOOL $TESTPOOL/$TESTFS
|
||||||
|
do
|
||||||
|
typeset mtpt=$(get_prop mountpoint $dst)
|
||||||
|
log_must zfs set snapdir=visible $dst
|
||||||
|
log_must test -d "$mtpt/.zfs"
|
||||||
|
if test -n "$(ls $mtpt)"; then
|
||||||
|
ls $mtpt
|
||||||
|
log_note "$mtpt not empty, skipping"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
|
||||||
|
log_must mkdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 4
|
||||||
|
log_must rmdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
|
||||||
|
log_must mkdir -p $mtpt/a/b
|
||||||
|
assert_link_count $mtpt 4
|
||||||
|
log_must rmdir $mtpt/a/b
|
||||||
|
log_must rmdir $mtpt/a
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
|
||||||
|
log_must touch $mtpt/a
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
log_must rm $mtpt/a
|
||||||
|
assert_link_count $mtpt 3
|
||||||
|
done
|
||||||
|
|
||||||
|
log_pass "Verify root inode (directory) has correct link count passed"
|
Loading…
Reference in New Issue