Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/sys_generic.c
Show First 20 Lines • Show All 849 Lines • ▼ Show 20 Lines | if ((fp->f_ops->fo_flags & DFLAG_SEEKABLE) == 0) { | ||||
error = ESPIPE; | error = ESPIPE; | ||||
goto out; | goto out; | ||||
} | } | ||||
if ((fp->f_flag & FWRITE) == 0) { | if ((fp->f_flag & FWRITE) == 0) { | ||||
error = EBADF; | error = EBADF; | ||||
goto out; | goto out; | ||||
} | } | ||||
error = fo_fallocate(fp, offset, len, td); | error = fo_fspacectl(fp, SPACECTL_ALLOC, offset, len, | ||||
SPACECTL_F_CANEXTEND, td->td_ucred, td); | |||||
out: | out: | ||||
fdrop(fp, td); | fdrop(fp, td); | ||||
return (error); | return (error); | ||||
} | } | ||||
int | int | ||||
sys_fspacectl(struct thread *td, struct fspacectl_args *uap) | sys_fspacectl(struct thread *td, struct fspacectl_args *uap) | ||||
{ | { | ||||
struct spacectl_range range; | struct spacectl_range range; | ||||
Show All 16 Lines | kern_fspacectl(struct thread *td, int fd, int cmd, struct spacectl_range *range, | ||||
int error; | int error; | ||||
offset = range->r_len; | offset = range->r_len; | ||||
AUDIT_ARG_FD(fd); | AUDIT_ARG_FD(fd); | ||||
AUDIT_ARG_CMD(cmd); | AUDIT_ARG_CMD(cmd); | ||||
AUDIT_ARG_FFLAGS(flags); | AUDIT_ARG_FFLAGS(flags); | ||||
if (cmd != SPACECTL_DEALLOC || | if ((cmd != SPACECTL_ALLOC && cmd != SPACECTL_DEALLOC) || | ||||
range->r_offset < 0 || range->r_len < 0 || | range->r_offset < 0 || range->r_len < 0 || | ||||
(flags & ~SPACECTL_F_SUPPORTED) != 0) | (flags & ~SPACECTL_F_SUPPORTED) != 0) | ||||
return (EINVAL); | return (EINVAL); | ||||
error = fget(td, fd, &cap_pwrite_rights, &fp); | error = fget(td, fd, &cap_pwrite_rights, &fp); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
AUDIT_ARG_FILE(td->td_proc, fp); | AUDIT_ARG_FILE(td->td_proc, fp); | ||||
▲ Show 20 Lines • Show All 1,147 Lines • Show Last 20 Lines |