Skip to content

Commit

Permalink
Add link count test for root inode
Browse files Browse the repository at this point in the history
Add tests for
97aa3ba("Fix link count of root inode when snapdir is visible")
as suggested in openzfs#8727.

Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Tony Hutter <[email protected]>
Signed-off-by: Tomohiro Kusumi <[email protected]>
Closes openzfs#8732
  • Loading branch information
kusumi authored and behlendorf committed May 29, 2019
1 parent fe0c9f4 commit 1608985
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 2 deletions.
2 changes: 1 addition & 1 deletion tests/runfiles/linux.run
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ tests = ['filesystem_count', 'filesystem_limit', 'snapshot_count',
tags = ['functional', 'limits']

[tests/functional/link_count]
tests = ['link_count_001']
tests = ['link_count_001', 'link_count_root_inode.ksh']
tags = ['functional', 'link_count']

[tests/functional/migration]
Expand Down
3 changes: 2 additions & 1 deletion tests/zfs-tests/tests/functional/link_count/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/link_count
dist_pkgdata_SCRIPTS = \
cleanup.ksh \
setup.ksh \
link_count_001.ksh
link_count_001.ksh \
link_count_root_inode.ksh
119 changes: 119 additions & 0 deletions tests/zfs-tests/tests/functional/link_count/link_count_root_inode.ksh
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 1608985

Please sign in to comment.