aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_event.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2008-01-07 20:05:19 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2008-01-07 20:05:19 +0000
commite46502943ac1471d7e3718557de87b17265985fe (patch)
tree4cf9280569e048ce55d457d60918586c5cf023e5 /sys/kern/kern_event.c
parent0460d3516d056ae2b10aa8f903ae8594e6167e5e (diff)
downloadsrc-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.c11
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)
{