diff options
Diffstat (limited to 'sys/contrib/openzfs/module/os/freebsd/zfs')
5 files changed, 65 insertions, 13 deletions
| diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/sysctl_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/sysctl_os.c index ace2360c032d..ebc2c0eeb6d2 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/sysctl_os.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/sysctl_os.c @@ -163,6 +163,13 @@ param_set_arc_int(SYSCTL_HANDLER_ARGS)  	return (0);  } +static void +warn_deprecated_sysctl(const char *old, const char *new) +{ +	printf("WARNING: sysctl vfs.zfs.%s is deprecated. Use vfs.zfs.%s instead.\n", +	    old, new); +} +  int  param_set_arc_max(SYSCTL_HANDLER_ARGS)  { @@ -185,12 +192,15 @@ param_set_arc_max(SYSCTL_HANDLER_ARGS)  	if (val != 0)  		zfs_arc_max = arc_c_max; +	if (arg2 != 0) +		warn_deprecated_sysctl("arc_max", "arc.max"); +  	return (0);  }  SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_max,  	CTLTYPE_ULONG | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, -	NULL, 0, param_set_arc_max, "LU", +	NULL, 1, param_set_arc_max, "LU",  	"Maximum ARC size in bytes (LEGACY)");  int @@ -214,12 +224,15 @@ param_set_arc_min(SYSCTL_HANDLER_ARGS)  	if (val != 0)  		zfs_arc_min = arc_c_min; +	if (arg2 != 0) +		warn_deprecated_sysctl("arc_min", "arc.min"); +  	return (0);  }  SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_min,  	CTLTYPE_ULONG | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, -	NULL, 0, param_set_arc_min, "LU", +	NULL, 1, param_set_arc_min, "LU",  	"Minimum ARC size in bytes (LEGACY)");  extern uint_t zfs_arc_free_target; @@ -242,6 +255,9 @@ param_set_arc_free_target(SYSCTL_HANDLER_ARGS)  	zfs_arc_free_target = val; +	if (arg2 != 0) +		warn_deprecated_sysctl("arc_free_target", "arc.free_target"); +  	return (0);  } @@ -251,7 +267,7 @@ param_set_arc_free_target(SYSCTL_HANDLER_ARGS)   */  SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_free_target,  	CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, -	NULL, 0, param_set_arc_free_target, "IU", +	NULL, 1, param_set_arc_free_target, "IU",  	"Desired number of free pages below which ARC triggers reclaim"  	" (LEGACY)"); @@ -270,12 +286,15 @@ param_set_arc_no_grow_shift(SYSCTL_HANDLER_ARGS)  	arc_no_grow_shift = val; +	if (arg2 != 0) +		warn_deprecated_sysctl("arc_no_grow_shift", "arc.no_grow_shift"); +  	return (0);  }  SYSCTL_PROC(_vfs_zfs, OID_AUTO, arc_no_grow_shift,  	CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, -	NULL, 0, param_set_arc_no_grow_shift, "I", +	NULL, 1, param_set_arc_no_grow_shift, "I",  	"log2(fraction of ARC which must be free to allow growing) (LEGACY)");  extern uint64_t l2arc_write_max; @@ -746,12 +765,15 @@ param_set_min_auto_ashift(SYSCTL_HANDLER_ARGS)  	zfs_vdev_min_auto_ashift = val; +	if (arg2 != 0) +		warn_deprecated_sysctl("min_auto_ashift", +		    "vdev.min_auto_ashift"); +  	return (0);  }  SYSCTL_PROC(_vfs_zfs, OID_AUTO, min_auto_ashift, -	CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, -	&zfs_vdev_min_auto_ashift, sizeof (zfs_vdev_min_auto_ashift), +	CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, NULL, 1,  	param_set_min_auto_ashift, "IU",  	"Min ashift used when creating new top-level vdev. (LEGACY)"); @@ -771,12 +793,15 @@ param_set_max_auto_ashift(SYSCTL_HANDLER_ARGS)  	zfs_vdev_max_auto_ashift = val; +	if (arg2 != 0) +		warn_deprecated_sysctl("max_auto_ashift", +		    "vdev.max_auto_ashift"); +  	return (0);  }  SYSCTL_PROC(_vfs_zfs, OID_AUTO, max_auto_ashift, -	CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, -	&zfs_vdev_max_auto_ashift, sizeof (zfs_vdev_max_auto_ashift), +	CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, NULL, 1,  	param_set_max_auto_ashift, "IU",  	"Max ashift used when optimizing for logical -> physical sector size on"  	" new top-level vdevs. (LEGACY)"); diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c index 4de48e013ec4..d0a9c662e6f0 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c @@ -762,8 +762,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; diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c index 411225786089..f34a2fd37a77 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c @@ -4116,6 +4116,7 @@ zfs_pathconf(vnode_t *vp, int cmd, ulong_t *valp, cred_t *cr,  {  	znode_t *zp;  	zfsvfs_t *zfsvfs; +	uint_t blksize, iosize;  	int error;  	switch (cmd) { @@ -4127,8 +4128,20 @@ zfs_pathconf(vnode_t *vp, int cmd, ulong_t *valp, cred_t *cr,  		*valp = 64;  		return (0);  	case _PC_MIN_HOLE_SIZE: -		*valp = (int)SPA_MINBLOCKSIZE; -		return (0); +		iosize = vp->v_mount->mnt_stat.f_iosize; +		if (vp->v_type == VREG) { +			zp = VTOZ(vp); +			blksize = zp->z_blksz; +			if (zp->z_size <= blksize) +				blksize = MAX(blksize, iosize); +			*valp = (int)blksize; +			return (0); +		} +		if (vp->v_type == VDIR) { +			*valp = (int)iosize; +			return (0); +		} +		return (EINVAL);  	case _PC_ACL_EXTENDED:  #if 0		/* POSIX ACLs are not implemented for ZFS on FreeBSD yet. */  		zp = VTOZ(vp); @@ -4210,8 +4223,20 @@ zfs_getpages(struct vnode *vp, vm_page_t *ma, int count, int *rbehind,  			zfs_vmobject_wlock(object);  			(void) vm_page_grab_pages(object, OFF_TO_IDX(start), -			    VM_ALLOC_NORMAL | VM_ALLOC_WAITOK | VM_ALLOC_ZERO, +			    VM_ALLOC_NORMAL | VM_ALLOC_WAITOK,  			    ma, count); +			if (!vm_page_all_valid(ma[count - 1])) { +				/* +				 * Later in this function, we copy DMU data to +				 * invalid pages only. The last page may not be +				 * entirely filled though, if the file does not +				 * end on a page boundary. Therefore, we zero +				 * that last page here to make sure it does not +				 * contain garbage after the end of file. +				 */ +				ASSERT(vm_page_none_valid(ma[count - 1])); +				vm_page_zero_invalid(ma[count - 1], FALSE); +			}  			zfs_vmobject_wunlock(object);  		}  		if (blksz == zp->z_blksz) diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zio_crypt.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zio_crypt.c index 91cf38016e00..8562c42b3220 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zio_crypt.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zio_crypt.c @@ -437,6 +437,7 @@ zio_crypt_key_wrap(crypto_key_t *cwkey, zio_crypt_key_t *key, uint8_t *iv,  	ASSERT3U(crypt, <, ZIO_CRYPT_FUNCTIONS); +	memset(&cuio_s, 0, sizeof (cuio_s));  	zfs_uio_init(&cuio, &cuio_s);  	keydata_len = zio_crypt_table[crypt].ci_keylen; @@ -519,6 +520,7 @@ zio_crypt_key_unwrap(crypto_key_t *cwkey, uint64_t crypt, uint64_t version,  	keydata_len = zio_crypt_table[crypt].ci_keylen;  	rw_init(&key->zk_salt_lock, NULL, RW_DEFAULT, NULL); +	memset(&cuio_s, 0, sizeof (cuio_s));  	zfs_uio_init(&cuio, &cuio_s);  	/* diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c index 0dd2ecd7fd8d..3ddbfcb97184 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c @@ -183,6 +183,7 @@ static struct filterops zvol_filterops_vnode = {  	.f_isfd = 1,  	.f_detach = zvol_filter_detach,  	.f_event = zvol_filter_vnode, +	.f_copy = knote_triv_copy,  };  extern uint_t zfs_geom_probe_vdev_key; | 
