Index: sys/compat/freebsd32/freebsd32.h =================================================================== --- sys/compat/freebsd32/freebsd32.h +++ sys/compat/freebsd32/freebsd32.h @@ -435,9 +435,4 @@ uint32_t pc_limit1, pc_limit2; }; -struct spacectl_range32 { - uint32_t r_offset1, r_offset2; - uint32_t r_len1, r_len2; -}; - #endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */ Index: sys/compat/freebsd32/freebsd32_misc.c =================================================================== --- sys/compat/freebsd32/freebsd32_misc.c +++ sys/compat/freebsd32/freebsd32_misc.c @@ -3845,37 +3845,3 @@ } return (error); } - -int -freebsd32_fspacectl(struct thread *td, struct freebsd32_fspacectl_args *uap) -{ - struct spacectl_range rqsr, rmsr; - struct spacectl_range32 rqsr32, rmsr32; - int error, cerror; - - error = copyin(uap->rqsr, &rqsr32, sizeof(rqsr32)); - if (error != 0) - return (error); - rqsr.r_offset = PAIR32TO64(off_t, rqsr32.r_offset); - rqsr.r_len = PAIR32TO64(off_t, rqsr32.r_len); - - error = kern_fspacectl(td, uap->fd, uap->cmd, &rqsr, uap->flags, - &rmsr); - if (uap->rmsr != NULL) { -#if BYTE_ORDER == LITTLE_ENDIAN - rmsr32.r_offset1 = rmsr.r_offset; - rmsr32.r_offset2 = rmsr.r_offset >> 32; - rmsr32.r_len1 = rmsr.r_len; - rmsr32.r_len2 = rmsr.r_len >> 32; -#else - rmsr32.r_offset1 = rmsr.r_offset >> 32; - rmsr32.r_offset2 = rmsr.r_offset; - rmsr32.r_len1 = rmsr.r_len >> 32; - rmsr32.r_len2 = rmsr.r_len; -#endif - cerror = copyout(&rmsr32, uap->rmsr, sizeof(rmsr32)); - if (error == 0) - error = cerror; - } - return (error); -} Index: sys/compat/freebsd32/syscalls.master =================================================================== --- sys/compat/freebsd32/syscalls.master +++ sys/compat/freebsd32/syscalls.master @@ -1176,10 +1176,10 @@ struct aiocb32 *aiocbp); } 579 AUE_AIO_READV STD { int freebsd32_aio_readv( \ struct aiocb32 *aiocbp); } -580 AUE_FSPACECTL STD { int freebsd32_fspacectl(int fd, \ +580 AUE_FSPACECTL NOPROTO { int fspacectl(int fd, \ int cmd, \ - const struct spacectl_range32 *rqsr, \ + const struct spacectl_range *rqsr, \ int flags, \ - struct spacectl_range32 *rmsr); } + struct spacectl_range *rmsr); } 581 AUE_NULL NOPROTO { int sched_getcpu(void); } ; vim: syntax=off Index: sys/kern/sys_generic.c =================================================================== --- sys/kern/sys_generic.c +++ sys/kern/sys_generic.c @@ -864,44 +864,30 @@ int sys_fspacectl(struct thread *td, struct fspacectl_args *uap) { - struct spacectl_range rqsr, rmsr; - int error, cerror; - - error = copyin(uap->rqsr, &rqsr, sizeof(rqsr)); - if (error != 0) - return (error); - - error = kern_fspacectl(td, uap->fd, uap->cmd, &rqsr, uap->flags, - &rmsr); - if (uap->rmsr != NULL) { - cerror = copyout(&rmsr, uap->rmsr, sizeof(rmsr)); - if (error == 0) - error = cerror; - } - return (error); + return (kern_fspacectl(td, uap->fd, uap->cmd, uap->rqsr, uap->flags, + uap->rmsr)); } int kern_fspacectl(struct thread *td, int fd, int cmd, - const struct spacectl_range *rqsr, int flags, struct spacectl_range *rmsrp) + const struct spacectl_range *urqsr, int flags, struct spacectl_range *urmsr) { struct file *fp; - struct spacectl_range rmsr; - int error; + struct spacectl_range rmsr, rqsr; + int cerror, error; AUDIT_ARG_FD(fd); AUDIT_ARG_CMD(cmd); AUDIT_ARG_FFLAGS(flags); - if (rqsr == NULL) - return (EINVAL); - rmsr = *rqsr; - if (rmsrp != NULL) - *rmsrp = rmsr; + error = copyin(urqsr, &rqsr, sizeof(rqsr)); + if (error != 0) + return (error); + rmsr = rqsr; if (cmd != SPACECTL_DEALLOC || - rqsr->r_offset < 0 || rqsr->r_len <= 0 || - rqsr->r_offset > OFF_MAX - rqsr->r_len || + rqsr.r_offset < 0 || rqsr.r_len <= 0 || + rqsr.r_offset > OFF_MAX - rqsr.r_len || (flags & ~SPACECTL_F_SUPPORTED) != 0) return (EINVAL); @@ -921,11 +907,15 @@ error = fo_fspacectl(fp, cmd, &rmsr.r_offset, &rmsr.r_len, flags, td->td_ucred, td); /* fspacectl is not restarted after signals if the file is modified. */ - if (rmsr.r_len != rqsr->r_len && (error == ERESTART || + if (rmsr.r_len != rqsr.r_len && (error == ERESTART || error == EINTR || error == EWOULDBLOCK)) error = 0; - if (rmsrp != NULL) - *rmsrp = rmsr; + if (urmsr != NULL) { + cerror = copyout(&rmsr, urmsr, sizeof(rmsr)); + if (error == 0) + error = cerror; + } + out: fdrop(fp, td); return (error);