diff options
author | John Baldwin <jhb@FreeBSD.org> | 2008-01-07 20:05:19 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2008-01-07 20:05:19 +0000 |
commit | e46502943ac1471d7e3718557de87b17265985fe (patch) | |
tree | 4cf9280569e048ce55d457d60918586c5cf023e5 /sys/kern/kern_event.c | |
parent | 0460d3516d056ae2b10aa8f903ae8594e6167e5e (diff) | |
download | src-e46502943ac1471d7e3718557de87b17265985fe.tar.gz src-e46502943ac1471d7e3718557de87b17265985fe.zip |
Make ftruncate a 'struct file' operation rather than a vnode operation.
This makes it possible to support ftruncate() on non-vnode file types in
the future.
- 'struct fileops' grows a 'fo_truncate' method to handle an ftruncate() on
a given file descriptor.
- ftruncate() moves to kern/sys_generic.c and now just fetches a file
object and invokes fo_truncate().
- The vnode-specific portions of ftruncate() move to vn_truncate() in
vfs_vnops.c which implements fo_truncate() for vnode file types.
- Non-vnode file types return EINVAL in their fo_truncate() method.
Submitted by: rwatson
Notes
Notes:
svn path=/head/; revision=175140
Diffstat (limited to 'sys/kern/kern_event.c')
-rw-r--r-- | sys/kern/kern_event.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index b5d01d07621c..171a150d862f 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -105,6 +105,7 @@ static void kqueue_fo_release(int filt); static fo_rdwr_t kqueue_read; static fo_rdwr_t kqueue_write; +static fo_truncate_t kqueue_truncate; static fo_ioctl_t kqueue_ioctl; static fo_poll_t kqueue_poll; static fo_kqfilter_t kqueue_kqfilter; @@ -114,6 +115,7 @@ static fo_close_t kqueue_close; static struct fileops kqueueops = { .fo_read = kqueue_read, .fo_write = kqueue_write, + .fo_truncate = kqueue_truncate, .fo_ioctl = kqueue_ioctl, .fo_poll = kqueue_poll, .fo_kqfilter = kqueue_kqfilter, @@ -1324,6 +1326,15 @@ kqueue_write(struct file *fp, struct uio *uio, struct ucred *active_cred, /*ARGSUSED*/ static int +kqueue_truncate(struct file *fp, off_t length, struct ucred *active_cred, + struct thread *td) +{ + + return (EINVAL); +} + +/*ARGSUSED*/ +static int kqueue_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *active_cred, struct thread *td) { |