Hi All, I'm trying to add and map the linux syscall fallocate to posix_fallocate so I modified sys/compat/linux/common/linux_file.c like:
int linux_sys_fallocate(struct lwp *l, const struct linux_sys_fallocate_args *uap, register_t *retval){<!-- --> int mode = SCARG(uap, mode); printf("\nCalling linux_sys_fallocate, mode is:%d\n",mode); if(mode == 0){<!-- --> struct sys_posix_fallocate_args fall; SCARG(&fall, fd) = SCARG(uap, fd); // Is PAD necessary? Compiles with and without as well but it's there in sys/kern/syscalls.master // and sys/kern/systrace_args.c but not in sys/kern/vfs_syscalls.c SCARG(&fall, PAD) = 0; SCARG(&fall, pos) = SCARG(uap, offset); SCARG(&fall, len) = SCARG(uap, len); int result = sys_posix_fallocate(l, &fall, retval); printf("result:%d\n",result); return result; } return EOPNOTSUPP; } This seems to compile but when tested it didn't work out so I added some printfs to sys/kern/vfs_syscalls.c: int sys_posix_fallocate(struct lwp *l, const struct sys_posix_fallocate_args *uap, register_t *retval) {<!-- --> /* {<!-- --> syscallarg(int) fd; syscallarg(off_t) pos; syscallarg(off_t) len; } */ int fd; off_t pos, len; struct file *fp; struct vnode *vp; int error; fd = SCARG(uap, fd); pos = SCARG(uap, pos); len = SCARG(uap, len); if (pos < 0 || len < 0 || len > OFF_T_MAX - pos) {<!-- --> printf("posix_fallocate line 4718\n"); *retval = EINVAL; return 0; } error = fd_getvnode(fd, &fp); if (error) {<!-- --> printf("posix_fallocate line 4725\n"); *retval = error; return 0; } if ((fp->f_flag & FWRITE) == 0) {<!-- --> printf("posix_fallocate line 4730\n"); error = EBADF; goto fail; } vp = fp->f_vnode; vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); if (vp->v_type == VDIR) {<!-- --> printf("posix_fallocate line 4738\n"); error = EISDIR; } else {<!-- --> printf("posix_fallocate line 4741\n"); error = VOP_FALLOCATE(vp, pos, len); } VOP_UNLOCK(vp); fail: fd_putfile(fd); *retval = error; return 0; } As you can see on the attached screenshot, "line 4741" gets printed out. So I went on to check what happens in VOP_FALLOCATE but it gets really internal there. Does anyone have any hint? Thanks, r0ller