git: 6c86379b0d0d - main - pjdfstest: Fix link count test

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Thu, 30 Oct 2025 20:18:43 UTC
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=6c86379b0d0deb2750a662579f63d71ffa519e81

commit 6c86379b0d0deb2750a662579f63d71ffa519e81
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-10-30 20:18:17 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-10-30 20:18:38 +0000

    pjdfstest: Fix link count test
    
    This UFS-only test verifies that attempting to create more links than
    permitted by the file system returns EMLINK, but has been broken ever
    since UFS_LINK_MAX was increased because a) it hardcodes the previous
    value of UFS_LINK_MAX, and b) the new value requires more space than
    the test allocates, so it ends up getting ENOSPC instead of EMLINK.
    
    * Switch to retrieving {PC_LINK_MAX} at runtime.
    
    * Stop the test when we reach {PC_LINK_MAX} links.  This ensures that
      we don't go on for hours if the actual limit turns out to be much
      higher than we anticipated (e.g. INT64_MAX on ZFS).
    
    * Double the size of the test filesystem.
    
    MFC after:      3 days
    Sponsored by:   Klara, Inc.
    Sponsored by:   NetApp, Inc.
    Fixes:          35a301555bff ("Increase UFS/FFS maximum link count from 32767 to 65530.")
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D53442
---
 contrib/pjdfstest/tests/link/05.t | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/contrib/pjdfstest/tests/link/05.t b/contrib/pjdfstest/tests/link/05.t
index 5a18c2103e1d..e6a7d1cc8201 100644
--- a/contrib/pjdfstest/tests/link/05.t
+++ b/contrib/pjdfstest/tests/link/05.t
@@ -2,7 +2,7 @@
 # vim: filetype=sh noexpandtab ts=8 sw=8
 # $FreeBSD: head/tools/regression/pjdfstest/tests/link/05.t 211352 2010-08-15 21:24:17Z pjd $
 
-desc="link returns EMLINK if the link count of the file named by name1 would exceed 32767"
+desc="link returns EMLINK if the link count of the file named by name1 would exceed {PC_LINK_MAX}"
 
 dir=`dirname $0`
 . ${dir}/../misc.sh
@@ -16,19 +16,20 @@ n1=`namegen`
 n2=`namegen`
 
 expect 0 mkdir ${n0} 0755
-n=`mdconfig -a -n -t malloc -s 1m` || exit
+n=`mdconfig -a -n -t malloc -s 2m` || exit
 newfs -i 1 /dev/md${n} >/dev/null || exit
 mount /dev/md${n} ${n0} || exit
+link_max=`${fstest} pathconf ${n0} _PC_LINK_MAX`
 expect 0 create ${n0}/${n1} 0644
 i=1
-while :; do
+while [ ${i} -le ${link_max} ]; do
 	link ${n0}/${n1} ${n0}/${i} >/dev/null 2>&1
 	if [ $? -ne 0 ]; then
 		break
 	fi
 	i=`expr $i + 1`
 done
-test_check $i -eq 32767
+test_check $i -eq ${link_max}
 
 expect EMLINK link ${n0}/${n1} ${n0}/${n2}