diff options
Diffstat (limited to 'sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c')
| -rw-r--r-- | sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c | 43 | 
1 files changed, 15 insertions, 28 deletions
| 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 a222c5de4a2a..d0a9c662e6f0 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_ctldir.c @@ -674,7 +674,6 @@ zfsctl_root_readdir(struct vop_readdir_args *ap)  	zfs_uio_t uio;  	int *eofp = ap->a_eofflag;  	off_t dots_offset; -	ssize_t orig_resid;  	int error;  	zfs_uio_init(&uio, ap->a_uio); @@ -694,11 +693,13 @@ zfsctl_root_readdir(struct vop_readdir_args *ap)  		return (0);  	} -	orig_resid = zfs_uio_resid(&uio);  	error = sfs_readdir_common(zfsvfs->z_root, ZFSCTL_INO_ROOT, ap, &uio,  	    &dots_offset); -	if (error != 0) -		goto err; +	if (error != 0) { +		if (error == ENAMETOOLONG) /* ran out of destination space */ +			error = 0; +		return (error); +	}  	if (zfs_uio_offset(&uio) != dots_offset)  		return (SET_ERROR(EINVAL)); @@ -711,11 +712,8 @@ zfsctl_root_readdir(struct vop_readdir_args *ap)  	entry.d_reclen = sizeof (entry);  	error = vfs_read_dirent(ap, &entry, zfs_uio_offset(&uio));  	if (error != 0) { -err: -		if (error == ENAMETOOLONG) { -			error = orig_resid == zfs_uio_resid(&uio) ? -			    EINVAL : 0; -		} +		if (error == ENAMETOOLONG) +			error = 0;  		return (SET_ERROR(error));  	}  	if (eofp != NULL) @@ -764,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; @@ -1060,21 +1057,17 @@ zfsctl_snapdir_readdir(struct vop_readdir_args *ap)  	zfs_uio_t uio;  	int *eofp = ap->a_eofflag;  	off_t dots_offset; -	ssize_t orig_resid;  	int error;  	zfs_uio_init(&uio, ap->a_uio); -	orig_resid = zfs_uio_resid(&uio);  	ASSERT3S(vp->v_type, ==, VDIR);  	error = sfs_readdir_common(ZFSCTL_INO_ROOT, ZFSCTL_INO_SNAPDIR, ap,  	    &uio, &dots_offset);  	if (error != 0) { -		if (error == ENAMETOOLONG) { /* ran out of destination space */ -			error = orig_resid == zfs_uio_resid(&uio) ? -			    EINVAL : 0; -		} +		if (error == ENAMETOOLONG) /* ran out of destination space */ +			error = 0;  		return (error);  	} @@ -1092,13 +1085,9 @@ zfsctl_snapdir_readdir(struct vop_readdir_args *ap)  		dsl_pool_config_exit(dmu_objset_pool(zfsvfs->z_os), FTAG);  		if (error != 0) {  			if (error == ENOENT) { -				if (orig_resid == zfs_uio_resid(&uio)) { -					error = EINVAL; -				} else { -					error = 0; -					if (eofp != NULL) -						*eofp = 1; -				} +				if (eofp != NULL) +					*eofp = 1; +				error = 0;  			}  			zfs_exit(zfsvfs, FTAG);  			return (error); @@ -1111,10 +1100,8 @@ zfsctl_snapdir_readdir(struct vop_readdir_args *ap)  		entry.d_reclen = sizeof (entry);  		error = vfs_read_dirent(ap, &entry, zfs_uio_offset(&uio));  		if (error != 0) { -			if (error == ENAMETOOLONG) { -				error = orig_resid == zfs_uio_resid(&uio) ? -				    EINVAL : 0; -			} +			if (error == ENAMETOOLONG) +				error = 0;  			zfs_exit(zfsvfs, FTAG);  			return (SET_ERROR(error));  		} | 
