FreeBSD: Correct _PC_MIN_HOLE_SIZE

The actual minimum hole size on ZFS is variable, but we always report
SPA_MINBLOCKSIZE, which is 512.  This may lead applications to believe
that they can reliably create holes at 512-byte boundaries and waste
resources trying to punch holes that ZFS ends up filling anyway.

* In the general case, if the vnode is a regular file, return its
  current block size, or the record size if the file is smaller than
  its own block size.  If the vnode is a directory, return the dataset
  record size.  If it is neither a regular file nor a directory,
  return EINVAL.

* In the control directory case, always return EINVAL.

Signed-off-by: Dag-Erling Smørgrav <des@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Closes #17750
This commit is contained in:
Dag-Erling Smørgrav
2025-10-08 15:13:22 +02:00
committed by Tony Hutter
parent e4a393cf78
commit 964dfc3176
2 changed files with 16 additions and 4 deletions
+1 -2
View File
@@ -764,8 +764,7 @@ zfsctl_common_pathconf(struct vop_pathconf_args *ap)
return (0);
case _PC_MIN_HOLE_SIZE:
*ap->a_retval = (int)SPA_MINBLOCKSIZE;
return (0);
return (EINVAL);
case _PC_ACL_EXTENDED:
*ap->a_retval = 0;