mirror of
https://git.freebsd.org/src.git
synced 2026-01-17 07:11:54 +00:00
zfs_vnops_os.c: Add support for the _PC_CLONE_BLKSIZE name
FreeBSD now has a pathconf name called _PC_CLONE_BLKSIZE which is the block size supported for block cloning for the file system. Since ZFS's block size varies per file, return the largest size likely to be used, or zero if block cloning is not supported. Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Rick Macklem <rmacklem@uoguelph.ca> Closes #17645
This commit is contained in:
parent
8266fa5858
commit
59f8f5dfe1
1 changed files with 19 additions and 0 deletions
|
|
@ -61,6 +61,7 @@
|
|||
#include <sys/fs/zfs.h>
|
||||
#include <sys/dmu.h>
|
||||
#include <sys/dmu_objset.h>
|
||||
#include <sys/dsl_dataset.h>
|
||||
#include <sys/spa.h>
|
||||
#include <sys/txg.h>
|
||||
#include <sys/dbuf.h>
|
||||
|
|
@ -5729,6 +5730,9 @@ zfs_freebsd_pathconf(struct vop_pathconf_args *ap)
|
|||
{
|
||||
ulong_t val;
|
||||
int error;
|
||||
#ifdef _PC_CLONE_BLKSIZE
|
||||
zfsvfs_t *zfsvfs;
|
||||
#endif
|
||||
|
||||
error = zfs_pathconf(ap->a_vp, ap->a_name, &val,
|
||||
curthread->td_ucred, NULL);
|
||||
|
|
@ -5774,6 +5778,21 @@ zfs_freebsd_pathconf(struct vop_pathconf_args *ap)
|
|||
case _PC_HAS_HIDDENSYSTEM:
|
||||
*ap->a_retval = 1;
|
||||
return (0);
|
||||
#endif
|
||||
#ifdef _PC_CLONE_BLKSIZE
|
||||
case _PC_CLONE_BLKSIZE:
|
||||
zfsvfs = (zfsvfs_t *)ap->a_vp->v_mount->mnt_data;
|
||||
if (zfs_bclone_enabled &&
|
||||
spa_feature_is_enabled(dmu_objset_spa(zfsvfs->z_os),
|
||||
SPA_FEATURE_BLOCK_CLONING))
|
||||
*ap->a_retval = dsl_dataset_feature_is_active(
|
||||
zfsvfs->z_os->os_dsl_dataset,
|
||||
SPA_FEATURE_LARGE_BLOCKS) ?
|
||||
SPA_MAXBLOCKSIZE :
|
||||
SPA_OLD_MAXBLOCKSIZE;
|
||||
else
|
||||
*ap->a_retval = 0;
|
||||
return (0);
|
||||
#endif
|
||||
default:
|
||||
return (vop_stdpathconf(ap));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue